Hyperledger 2.0 Установка и вызов цепного кода с PrivateData не работает. (без PrivateData - ОК) - PullRequest
0 голосов
/ 08 апреля 2020

Я пытаюсь установить цепной код на узле Hyperledger 2.0. Я нашел учебник ((https://pthomann.pl/how-to-deploy-chaincode-in-hyperledger-fabric-2-0/)) и немного изменил скрипт (извините за некоторые фиктивные переменные):

#!/usr/bin/env bash
## MUST BE CHANGED EVERY BUILD
CHAINCODE_VERSION=0.0.18
## Chaincode info - CONFIGURE ONCE
CHAINCODE_LANG=node
CHAINCODE_NAME=my-blockchain
CHAINCODE_INIT_ARGS='{"Args":[]}'
CHAINCODE_LABEL="industrial-blockchain-labelx"
CHAINCODE_PACKAGE_NAME="${CHAINCODE_LABEL}.tar.gz"
# Source path in the cli container
CHAINCODE_SOURCE_PATH="/home/github.com/my-blockchain"
# Other info - CONFIGURE ONCE
CHANNEL_NAME="my-channel"
ORDERER="orderer1"
ORDERER_ADDRESS="orderer1:7050"
ORDERER_CA_FILE="/home/crypto/ordererOrganizations/industrial/tlsca/tlsca.industrial-cert.pem"
export CORE_PEER_ADDRESS="peer0:7051"
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_TLS_CERT_FILE="/home/crypto/peerOrganizations/org1/peers/peer0.org1/tls/server.crt"
export CORE_PEER_TLS_ROOTCERT_FILE="/home/crypto/peerOrganizations/org1/peers/peer0.org1/tls/ca.crt"
export CORE_PEER_MSPCONFIGPATH="/home/crypto/peerOrganizations/org1/users/Admin@org1/msp"
export TLS_CERT="/home/crypto/peerOrganizations/org1/users/Admin@$org1/msp/cacerts/ca-org1.org1-cert.pem"
export KEY_FILE="/home/crypto/peerOrganizations/org1/users/Admin@$org1/msp/keystore/priv_sk"
# Generate chaincode package - common step
peer lifecycle chaincode package $CHAINCODE_PACKAGE_NAME --path $CHAINCODE_SOURCE_PATH --lang $CHAINCODE_LANG --label $CHAINCODE_LABEL
# Get sequence value
peer lifecycle chaincode querycommitted --channelID $CHANNEL_NAME > /home/crypto/sequence.txt

seq=$(awk '{for(i=1;i<=NF;i++)if($i=="Sequence:")print $(i+1)}' /home/crypto/sequence.txt)
SEQUENCE=$(echo "${seq//,}")
if [ -z $SEQUENCE ] ; then
SEQUENCE=1
echo 'No sequence yet, initializing with 1, got: '$SEQUENCE
else
SEQUENCE=$(($SEQUENCE + 1))
echo 'Incrementing sequence by 1, got: '$SEQUENCE
fi
#installChaincode $CORE_PEER_ADDRESS $CORE_PEER_TLS_ROOTCERT_FILE $SEQUENCE

echo 'Installing chaincode on peer: ' $CORE_PEER_ADDRESS
peer lifecycle chaincode install $CHAINCODE_PACKAGE_NAME >&install-log.txt
PACKAGE_ID=$(awk '{for(i=1;i<=NF;i++)if($i=="identifier:")print $(i+1)}' install-log.txt)
echo "Package ID: $PACKAGE_ID"
echo "Approve"
# 
peer lifecycle chaincode approveformyorg -o $ORDERER_ADDRESS --tls --cafile $ORDERER_CA_FILE --channelID $CHANNEL_NAME --name $CHAINCODE_NAME --version $CHAINCODE_VERSION --package-id $PACKAGE_ID --waitForEvent --sequence $SEQUENCE --signature-policy "OR('Org1MSP.member')" --collections-config $CHAINCODE_SOURCE_PATH/collections_config_2ORG.json
echo "Commit"
peer lifecycle chaincode commit -o $ORDERER_ADDRESS --tls --cafile $ORDERER_CA_FILE --channelID $CHANNEL_NAME --name $CHAINCODE_NAME --version $CHAINCODE_VERSION --sequence $SEQUENCE #--init-required
echo "Invoke"
peer chaincode invoke -o $ORDERER_ADDRESS --tls --cafile $ORDERER_CA_FILE --ordererTLSHostnameOverride $ORDERER -C $CHANNEL_NAME -n $CHAINCODE_NAME --peerAddresses $CORE_PEER_ADDRESS --isInit -c $CHAINCODE_INIT_ARGS --tlsRootCertFiles $CORE_PEER_TLS_ROOTCERT_FILE

echo 'Finished installing chaincode on peer: ' $CORE_PEER_ADDRESS

В дополнение к исходному примеру я добавляю следующие параметры для разрешения приватных данных "--signature-policy" ИЛИ ('Org1MSP.member') "--collections-config $ CHAINCODE_SOURCE_PATH / collection_config_2ORG. json". И это не работает. Если я уберу эти параметры, установка будет выполнена. Конечно, я получаю ошибки, когда вызываю свой код, поскольку не определены частные коллекции данных. Ошибка с включенными личными данными выглядит следующим образом:

Package ID: my-blockchain-labelx:b79dec50dfff71a0a73106adacec7e64d2f9d6c00a8a75b30d2c67a9a252ff8b
Approve
2020-04-08 10:58:01.931 UTC [chaincodeCmd] ClientWait -> INFO 001 txid [6d98efe00099c06cee55e54d72b97e5764bb988c8c4a0cf22c2fa1c71a884281] committed with status (VALID) at
Commit
Error: proposal failed with status: 500 - failed to invoke backing implementation of 'CommitChaincodeDefinition': chaincode definition not agreed to by this org (Org1MSP)

Вот конфигурация:

[
    {
        "name": "privateOrg1",
        "policy": "OR('Org1MSP.member')",
        "requiredPeerCount": 0,
        "maxPeerCount": 3,
        "blockToLive": 300,
        "memberOnlyRead": true
    }
]

Нужно ли что-то изменить, чтобы включить личные данные? Почему он вдруг не может выполнить CommitChaincodeDefinition?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...