2017-08-14 1 views
0

J'essaie de modifier l'exemple fabcar à partir d'échantillons de tissu pour être capable d'itérer rapidement sur le développement de la chaincode. Par défaut, j'ai toujours besoin de supprimer l'image et de relancer le script d'installation, comme this question elaborated on. Cela prend ~ 30s.Hyperledger Tissu fabcar exemple chaincode en mode dev (peer-chaincodedev)

J'ai vu le drapeau --peer-chaincodedev=true dans le docker-compose et je me demande comment je peux faire fonctionner ça.

J'ai suivi le Tutorial "Chaincode for Developers" et l'ai comparé avec le docker-composer du réseau de base. J'ai remarqué qu'il y a un conteneur nommé chaincode qui exécute une image nommée fabric-ccenv. J'ai ajouté cette définition au docker compose mais ne peux pas instancier le chaincode sur le pair. Comment cela est-il censé être fait?

Je suis en train de courir

peer chaincode instantiate -o orderer.example.com:7050 -C mychannel -n fabcar -v 1.0 -c '{"Args":[""]}' -P "OR ('Org1MSP.member','Org2MSP.member')" 

dans le cli mais je me fais

2017-08-14 11:54:13.404 UTC [msp] GetLocalMSP -> DEBU 001 Returning existing local MSP 
2017-08-14 11:54:13.404 UTC [msp] GetDefaultSigningIdentity -> DEBU 002 Obtaining default signing identity 
2017-08-14 11:54:13.406 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 003 Using default escc 
2017-08-14 11:54:13.406 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 004 Using default vscc 
2017-08-14 11:54:13.407 UTC [msp/identity] Sign -> DEBU 005 Sign: plaintext: 0A95070A6708031A0C08E59EC6CC0510...324D53500A04657363630A0476736363 
2017-08-14 11:54:13.407 UTC [msp/identity] Sign -> DEBU 006 Sign: digest: 61C75870AB68C1E7D6921DB4CA6029A0093A3D57DB421BC697864555BFC81167 
Error: Error endorsing chaincode: rpc error: code = Unknown desc = Failed to deserialize creator identity, err MSP Org1MSP is unknown 

Répondre

3

Le --peer-chaincodedev=true ou ce qu'on appelle le mode dev est introduit pour permettre un court-circuit tout en développant une chaincode, à savoir pour vous permettre d'ignorer le processus officiel d'emballage, de compilation et de déploiement de l'image du docker avec chaincode. Au lieu de cela, vous pouvez exécuter votre chaincode depuis votre IDE et déboguer et travailler de manière interactive avec celui-ci. Par exemple, vous pourriez avoir une chaincode très simple:

type smartContract struct { 
} 

func (p *smartContract) Init(stub shim.ChaincodeStubInterface) peer.Response { 
    return shim.Success(nil) 
} 

func (p *smartContract) Invoke(stub shim.ChaincodeStubInterface) peer.Response { 
    actionName, params := stub.GetFunctionAndParameters() 

    if actionName == "hello" { 
     shim.putState("Greeting", "Hello World") 
     return shim.Success(nil) 
    } 
return shim.Error(errors.New("Undefined function")) 
} 

func main() { 
    err := shim.Start(new(smartContract)) 
    if err != nil { 
     fmt.Printf("Error starting chaincode: %s", err) 
    } 
} 

maintenant Si vous exécutez votre pair avec --peer-chaincodedev=true drapeau, vous pouvez exécuter votre chaincode de son dossier, par exemple:

CORE_PEER_ADDRESS=localhost:7051 CORE_CHAINCODE_ID_NAME=chaincodeName:v1.0 go run smartContract.go 

Suivant que vous avez en cours d'exécution, vous devez installer et instancier le chaincode dans le canal comme d'habitude. Bien sûr, vous pouvez exécuter chaincode à partir de l'IDE de votre choix.

NOTE: lors de l'instanciation du code de connexion, vous devez utiliser le nom et la version que vous avez définis dans la variable CORE_CHAINCODE_ID_NAME=chaincodeName:v1.0. Et bien sûr, vous devez avoir créé une chaîne.

# Creating and joining the channel 
peer channel create -o localhost:7050 -c mychannel -f mychannel.tx 
peer channel join -o localhost:7050 --blockpath mychannel.block 

# Once chaincode is running we can install and instantiate it 
peer chaincode install -o localhost:7050 -n chaincodeName -v 1.0 -p github.com/somepackage/chaincode 
peer chaincode instantiate -o localhost:7050 -n chaincodeName -v 1.0 -C mychannel -c '{"Args": ["init"]}' 

Retour à votre problème, je pense que l'erreur que vous voyez peut-être à cause de mauvaise configuration de votre MSP ou vous n'avez pas créé un canal. En cas de mauvaise configuration, vous devez vous assurer que CORE_PEER_MSPCONFIGPATH des points variables environnementales à l'emplacement en cours de validité, par exemple tel qu'il est utilisé dans de nombreux exemples dans le contexte du conteneur cli:

export CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp 

également spécifier ID MSP:

CORE_PEER_LOCALMSPID=Org1MSP 

et adresse de cautionner par les pairs:

CORE_PEER_ADDRESS=peer0.org1.example.com:7051 
0

Merci Artem, je trouve maintenant la solution à mon problème.

J'ai copié la définition de docker-composer pour le conteneur chaincode, qui à son tour a écrasé les volumes montés. Donc, chaque fois que cela a été monté, le MSP n'a pas pu être trouvé. J'ai donc retiré à nouveau le conteneur chaincode.

Je propose que le install, instantiate et invoke commandes du script startFabric.sh dans un script install.sh. Je démarre les conteneurs docker en exécutant ./startFabric.sh. Ensuite, je compiler et exécuter le chaincode sur l'hôte avec

CORE_PEER_ADDRESS=localhost:7051 CORE_CHAINCODE_ID_NAME=fabcar:${VERSION} go run fabcar.go 

Maintenant, je dois exécuter install.sh avec la version utilisée à l'étape précédente.

Après avoir apporté des modifications au chaincode, je vais recompiler le chaincode sur l'hôte, en incrémentant la version. Ensuite, j'exécute upgrade.sh, qui ressemble à ceci:

#!/bin/bash 
# 
# Exit on first error 
set -e 

if [ -z "$1" ]; then echo "Error: Needs chaincode version"; exit; fi 
CHAINCODE_VERSION=$1 

docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp" cli peer chaincode install -n fabcar -v ${CHAINCODE_VERSION} -p github.com/fabcar 
docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp" cli peer chaincode upgrade -o orderer.example.com:7050 -C mychannel -n fabcar -v ${CHAINCODE_VERSION} -c '{"Args":[""]}' -P "OR ('Org1MSP.member','Org2MSP.member')"