Nous avons configuré hyperledger Fabric 1.2 sur le réseau Amazon Managed Blockchain. Nous avons suivi le guide en 8 étapes managé-blockchain-get-started-tutorial pour configurer cette configuration. Nous avons configuré le réseau, le membre et l'homologue et le point de terminaison du service VPC est également configuré. Fabric Client VM est également configuré sur AWS Linux 2 AMI et nous pouvons également installer / lancer et appeler un exemple de code de chaîne (comme indiqué sur Set 7: Install and Run chaincode ). Maintenant, notre barrage est de savoir comment exposer une API en tant que repos afin que l'API soit accessible depuis l'extérieur de la machine virtuelle du client Fabric. Nous luttons depuis plusieurs jours.
Selon le didacticiel AWS (Étape 7.4: Invoquer le code de chaîne) Nous invoquons le code de chaîne avec la commande ci-dessous.
docker exec -e "CORE_PEER_TLS_ENABLED=true" -e "CORE_PEER_TLS_ROOTCERT_FILE=/opt/home/managedblockchain-tls-chain.pem" -e "CORE_PEER_ADDRESS=$PEER" -e "CORE_PEER_LOCALMSPID=$MSP" -e "CORE_PEER_MSPCONFIGPATH=$MSP_PATH" cli peer chaincode invoke -C mychannel -n mycc -c '{"Args":["invoke","a","b","10"]}' -o $ORDERER --cafile /opt/home/managedblockchain-tls-chain.pem --tls
J'ai essayé d'envoyer une demande de message du facteur sur ($ PEER)
avec la charge utile: {"Args": ["invoke", "a", "b", "10"]}
Mais j'ai une erreur:
Impossible d’obtenir une réponse
Une erreur s'est produite lors de la connexion à
nd-NDNDNDNDND.m-MMMMMMMMMM-n-NNNNNNNNNN.managedblockchain.us-east-1.amazonaws.com:30003/mycc
Comment pouvons-nous invoquer cette API avec ces arguments en tant qu'appel REST depuis l'extérieur de cette VM ?
Par défaut, le SDK Hyperledger 1.2 go est installé, pouvez-vous nous conseiller comment exposer l'API Chaincode comme REST avec go SDK? Nous savons que pour permettre la communication entre le front-end et le Hyperledger Fabric Layer, l'un des moyens consiste à appeler gRPC, mais nous ne savons pas comment configurer et utiliser grpc pour Go.
3 Réponses :
D'après vos explications, il semble que vous ayez correctement configuré le réseau Fabric Hyperledger. Lorsque vous êtes en mesure d'installer, instancier et invoquer le code de chaîne via CLI.
Alors, revenons à votre question, Hyperledger Fabric nous fournit deux types de mécanismes pour les opérations qui se font via CLI et via RPC (en utilisant grpc). Vous pouvez utiliser les SDK Fabric Hyperledger (SDK Node, Java SDK, GO SDK, etc.) qui fournissent les bibliothèques qui implémentent la méthode RPC pour le réseau Hyperledger.
Ainsi, vous pouvez créer une application Web (Rest / Soap) dans l'une des langues prises en charge. Voici les liens des SDK: -
Voici des exemples d'applications Web Hyperledger Fabric: -
Échantillons Hyperledger Fabric
Je vous recommande de suivre l'exemple de transfert de solde.
merci Ankit pour l'envoi des liens, avez-vous un exemple particulier (en utilisant grpc avec GO)?
Vous pouvez utiliser Gorilla mux pour exposer l'api du code de chaîne en tant que repos à l'aide de fabric go sdk. p >
L'appel de la fonction via le code de chaîne peut être effectué via CLI ou à l'aide de SDK.
J'ai suivi ce tutoriel chainhero pour écrire le SDK dans Golang.
Les API REST n'ont pas été exposées dans ce tutoriel. Pour générer des API REST, j'ai utilisé gorilla / mux dans l'un de mes projets. Gorilla / mux est utilisé dans la partie inférieure du code ci-dessous:
package main import ( "encoding/json" "fmt" "github.com/chainHero/heroes-service/blockchain" "net/http" "github.com/gorilla/mux" "os" "log" ) func main() { // Definition of the Fabric SDK properties fSetup := blockchain.FabricSetup{ // Network parameters OrdererID: "orderer.hf.chainhero.io", // Channel parameters ChannelID: "chainhero", ChannelConfig: os.Getenv("GOPATH") + "/src/github.com/chainHero/heroes-service/fixtures/artifacts/chainhero.channel.tx", // Chaincode parameters ChainCodeID: "heroes-service", ChaincodeGoPath: os.Getenv("GOPATH"), ChaincodePath: "github.com/chainHero/heroes-service/chaincode/", OrgAdmin: "Admin", OrgName: "org1", ConfigFile: "config.yaml", // User parameters UserName: "User1", } // Initialization of the Fabric SDK from the previously set properties err := fSetup.Initialize() if err != nil { fmt.Printf("Unable to initialize the Fabric SDK: %v\n", err) return } // Close SDK defer fSetup.CloseSDK() // Install and instantiate the chaincode err = fSetup.InstallAndInstantiateCC() if err != nil { fmt.Printf("Unable to install and instantiate the chaincode: %v\n", err) return } router := mux.NewRouter() //GetPerson and CreatePerson are the functions implemented in the chaincode. router.HandleFunc("/api/{fcn}",fSetup.GetPerson).Methods("GET") router.HandleFunc("/api/{fcn}", fSetup.CreatePerson).Methods("POST") log.Fatal(http.ListenAndServe(":8000", router)) }