Hyperledger Fabric:如何以用户角色调用链码?
Hyperledger Fabric: how can I invoke a chaincode with the role of a user?
我已经建立了一个包含三个组织的示例网络:
- Org0 有两个订购者;
- 具有一个同级和一个管理员身份的 Org1;
- Org2 具有一个对等体、一个管理员身份和两个用户身份。
我还设置了两个 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_ID
、CORE_PEER_MSPCONFIGPATH
等)。
任何人,在任何时候您都需要使用 SDK 开发客户端应用程序以实现更复杂的操作和执行流程。
您还可以寻找一些更高级别的工具。 IBM Blockchain Platform extension 对于 VSCode 是一个很好的选择。
我已经建立了一个包含三个组织的示例网络:
- Org0 有两个订购者;
- 具有一个同级和一个管理员身份的 Org1;
- Org2 具有一个对等体、一个管理员身份和两个用户身份。
我还设置了两个 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_ID
、CORE_PEER_MSPCONFIGPATH
等)。
任何人,在任何时候您都需要使用 SDK 开发客户端应用程序以实现更复杂的操作和执行流程。
您还可以寻找一些更高级别的工具。 IBM Blockchain Platform extension 对于 VSCode 是一个很好的选择。