Hyperledger Fabric:如何以用户角色调用链码?

Hyperledger Fabric: how can I invoke a chaincode with the role of a user?

我已经建立了一个包含三个组织的示例网络:

我还设置了两个 CA,第二个为 TLS 提供证书。

在 docker-compose.yaml 中,我为 Org1 和 Org2 创建了两个 cli 容器,我可以在其中充当管理员加入频道并安装链代码。这样,我就可以毫无问题地部署链代码。如果我从 Org1 或 Org2 的 cli 容器调用链代码,它总是以组织管理员的角色调用(请求者的证书始终是组织的管理员之一)。

如何在不实施应用程序的情况下以我已经在我的 CA 上注册的用户角色调用智能合约(使用 Org2 用户之一的用户证书)?这对我仅用于测试目的有用。

目前我运行这个命令:

peer chaincode invoke -C mychannel -n basic -c '{"Args":\["InsertData", "asset1","1300"\]}' -o orderer1.org0.com:7050 --tls true --cafile Org0/tls/cacerts/localhost-8054.pem --peerAddresses peer1.org1.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/org1/peer1/tls/cacerts/localhost-8054.pem --peerAddresses peer1.org2.com:7056 --tlsRootCertFiles /chaincode/certs/Org2/tls/cacerts/localhost-8054.pem --clientauth --certfile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/org1/peer1/tls/signcerts/cert.pem --keyfile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/org1/peer1/tls/keystore/server.key

来自这个容器(这是docker-compose.yaml文件中对应的服务):

cli_org2:
container_name: cli_org2
image: hyperledger/fabric-tools:2.3
#1.4.2
tty: true
stdin_open: true

environment:
  - GOPATH=/opt/gopath
  - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
  - FABRIC_LOGGING_SPEC=INFO
  - CORE_PEER_ID=cli_org2 
  - CORE_PEER_LOCALMSPID=org2
  
  - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/org2/peer1/msp/user/admin
  - CORE_PEER_ADDRESS=peer1.org2.com:7056

  ##TLS
  - CORE_PEER_TLS_ENABLED=true
  - CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/org2/peer1/tls/cacerts/localhost-8054.pem
  - CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/org2/peer1/tls/signcerts/cert.pem    #/tlsca/server.crt
  - CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/org2/peer1/tls/keystore/server.key
  - CORE_PEER_TLS_CLIENTAUTHREQUIRED=true
  - CORE_PEER_TLS_CLIENTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/org2/peer1/tls/signcerts/cert.pem
  - CORE_PEER_TLS_CLIENTKEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/org2/peer1/tls/keystore/server.key

working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
command: /bin/bash
volumes:
    - ./tlsca:/tlsca
    - /var/run/:/host/var/run/
    - ./peerOrgs:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto
    - ./channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts
    - ./chaincode:/chaincode
networks:
  fabric:

您可以简单地从您的 CA 注册您的新用户加密 material(MSP 和 TLS)并部署一个类似于管理员容器的客户端容器,但指向新的 material(具有不同的卷和环境变量 CORE_PEER_IDCORE_PEER_MSPCONFIGPATH 等)。

任何人,在任何时候您都需要使用 SDK 开发客户端应用程序以实现更复杂的操作和执行流程。

您还可以寻找一些更高级别的工具。 IBM Blockchain Platform extension 对于 VSCode 是一个很好的选择。