如何在Hyperledger Fabric 1.2中创建动态认可策略(ESCC)?

时间:2018-08-20 15:46:18

标签: hyperledger-fabric

在认可政策文档中,规定如下:

  

通过策略限制的评估时间(终止),确定性,性能和安全性保证,动态添加批注策略(例如,通过在链代码部署时间上部署事务)非常敏感。因此,不允许动态添加背书策略,但将来可以支持。

如果我对制定更灵活的背书政策感兴趣,从而我们不断添加新的同行,并且希望背书政策基于与特定交易相关的一组唯一的同行,那么可能吗?

即在某些情况下,交易是在两个特定的对等方之间进行的,因此它们都应该是有效的背书人。存在其他五个同龄人,可以说他们是竞争对手,在这种情况下,不应允许他们认可。

在1.1中,似乎没有像https://jira.hyperledger.org/browse/FAB-8729中提到的那样可以部署自己的自定义ESCC / VSCC。

使用新的1.2可插拔体系结构,我看不到如何获得对ChaincodeStubInterface的访问权以处理基于传递的事务参数的自定义逻辑。例如,旧的1.1可插拔链式代码体系结构扩展了Chaincode interface

鉴于以下方法签名,是否可以使用新方法签名中的数据访问ChaincodeStubInterface

https://hyperledger-fabric.readthedocs.io/en/release-1.2/pluggable_endorsement_and_validation.html

Endorse(payload []byte, sp *peer.SignedProposal) (*peer.Endorsement, []byte, error)

Validate(block *common.Block, namespace string, txPosition int, actionPosition int, contextData ...ContextDatum) error

具体来说,我想访问类似args := stub.GetStringArgs()之类的东西,甚至只访问有效负载的复合键/索引名。

1 个答案:

答案 0 :(得分:0)

我最近尝试在自己的应用程序上开发类似的功能。尽管当前版本不支持动态认可策略,但是我们可以使用动态配置来帮助我们定义我们期望在应用中使用哪种认可方法。

我不确定是否可以使用方法签名直接访问ChaincodeStubInterface,但是我将尝试并继续进行更新。

这是我的解决方案。希望这会有所帮助。

  1. 使用Fabric-SDK-Node创建我的应用,并确保结构版本高于1.1.0,这为我们提供了更全面的配置文件。
  2. 这是示例配置文件的一部分,由官方提供:

    orderers:
      - orderer.example.com
    peers:
      peer0.org1.example.com:
        endorsingPeer: true
        chaincodeQuery: true
        ledgerQuery: true
        eventSource: true
      peer0.org2.example.com:
        endorsingPeer: true
        chaincodeQuery: true
        ledgerQuery: true
        eventSource: true
    chaincodes:
      - mycc:v0
    
  3. 您会注意到,该示例为我们提供了四个选项,用于定义您要用于交易的连接策略。通过将peer0.org2.endorsingPeer设置为false,当用户完成setConfigSetting并加载连接配置文件后,有人向结构网络发送调用建议的情况发生时,事务只能被peer0.org1认可。这三个选项的其余部分与endorsingPeer相同。
  4. 现在,我们可以创建一个函数,让用户在发送交易之前动态设计其所需的认可策略。