2
votes

Comment exposer l'API Chaincode en tant que REST avec Hyperledger GO SDK

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)

https: / /nd-NDNDNDNDND.m-MMMMMMMMMM-n-NNNNNNNNNNN.managedblockchain.us-east-1.amazonaws.com:30003/mycc

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.


0 commentaires

3 Réponses :


4
votes

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: -

SDK Hyperledger Fabric Node

SDK Java Hyperledger Fabric

SDK Hyperledger Fabric Go

Voici des exemples d'applications Web Hyperledger Fabric: -

Échantillons Hyperledger Fabric

Je vous recommande de suivre l'exemple de transfert de solde.


1 commentaires

merci Ankit pour l'envoi des liens, avez-vous un exemple particulier (en utilisant grpc avec GO)?



1
votes

Vous pouvez utiliser Gorilla mux pour exposer l'api du code de chaîne en tant que repos à l'aide de fabric go sdk.


0 commentaires

4
votes

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))

}


0 commentaires