如何在Hyperledger v1.0中检索/实现基于用户/角色的执行?

时间:2017-07-20 14:25:33

标签: blockchain hyperledger hyperledger-fabric

我正在尝试在Hyperledger v1.0中构建一个具有以下功能的应用程序

  • 多签名合同执行
  • 合约的可发现性
  • 选择性 可视性。

但我无法找到,

  • 检索角色/用户信息的任何功能
  • 定义并创建具有不同角色的用户。

关于如何让我的智能合约被其他智能合约发现的任何例子也将受到高度赞赏。

3 个答案:

答案 0 :(得分:1)

您可以通过以下方式获取链码执行中提案创建者的证书:

        creatorByte, err := stub.GetCreator()
    if err != nil {
        return shim.Error("Error stub.GetCreator")
    }
    bl, _ := pem.Decode(creatorByte)
    if bl == nil {
        return shim.Error("Could not decode the PEM structure")
    }
    cert, err := x509.ParseCertificate(bl.Bytes)
    if err != nil {
        return shim.Error("ParseCertificate failed")
    }

答案 1 :(得分:0)

我要回答你问题的单点:

  

定义并创建具有不同角色的用户。

当您创建用户或组件时,您可以通过Fabric CA创建它,即当您创建某个内容时,您可以定义它的内容:peer,orderer,user ...那么,它的用户类型取决于它的作用。

我不知道我是否回答了你的问题。你能提供更多关于他们的信息吗?

答案 2 :(得分:0)

第一个问题:

  

任何用于检索角色/用户信息的功能

这是通过CID库完成的。

  

使用客户端身份链代码库,您可以编写链代码,该链代码根据客户端(即链代码的调用者)的身份做出访问控制决策。特别是,您可以根据与客户端关联的以下两项或一项来做出访问控制决定:

     
      
  • 客户身份的MSP(会员服务提供商)ID
  •   
  • 与客户端身份关联的属性。   属性只是与身份相关联的名称和值对。例如,email = me @ gmail.com表示身份具有电子邮件属性,其值为me@gmail.com
  •   

对于Node.js:https://fabric-shim.github.io/master/fabric-shim.ClientIdentity.html

第二个问题:

  

定义和创建具有不同角色的用户。

https://hyperledger-fabric-ca.readthedocs.io/en/latest/users-guide.html#attribute-based-access-control

fabric-ca-client register --id.name user1 --id.secret user1pw --id.type user --id.affiliation org1 --id.attrs 'app1Admin=true:ecert,email=user1@gmail.com'

或在注册时

fabric-ca-client enroll -u http://user1:user1pw@localhost:7054 --enrollment.attrs "email,phone:opt"

https://github.com/hyperledger/fabric/blob/release-1.3/core/chaincode/lib/cid/README.md

  

属性以扩展名的形式存储在X509证书中,其ASN.1 OID(抽象语法表示法对象标识符)为1.2.3.4.5.6.7.8.1。扩展名的值是格式为{“ attrs”:{:的JSON字符串。

请参见https://github.com/hyperledger/fabric-samples/blob/release-1.3/fabric-ca/README.md

  

如何使用Hyperledger Fabric CA客户端和服务器生成所有加密材料,而不是使用加密原。 cryptogen工具不适用于生产环境,因为它在一个位置生成所有私钥,然后必须将其复制到适当的主机或容器中。此示例演示了如何为订购者,对等方,管理员和最终用户生成加密材料,以使私钥永远不会离开生成它们的主机或容器。