Как представить Chaincode API как REST с помощью Hyperledger go SDK - PullRequest
0 голосов
/ 25 января 2019

Мы настроили hyperledger Fabric 1.2 в сети Amazon Managed Blockchain.Мы выполнили 8 шагов руководства managed-blockchain-get-start-tutorial , чтобы настроить эту настройку.Мы настроили сеть, участника и однорангового узла, а также настроена конечная точка службы VPC.Виртуальная виртуальная машина клиента также настроена на AWS Linux 2 AMI, и мы также можем установить / инициировать и вызвать пример цепного кода (как указано в Set 7: Установить и запустить цепной код ).Теперь наш контрольно-пропускной пункт состоит в том, как выставить API в состоянии покоя, чтобы к нему можно было получить доступ из-за пределов виртуальной машины Fabric.Мы боремся со многими днями.

Согласно учебному пособию AWS (шаг 7.4: вызов цепного кода) Мы вызываем цепной код с помощью приведенной ниже команды.

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

Я попытался отправить почтовый запрос от почтальона на ($ PEER)

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

с полезной нагрузкой: {"Args":["invoke","a","b","10"]} Но получена ошибка: не удалось получить ответ Ошибка подключения к

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

Как мы можем вызвать этот API с этими аргументамикак вызов REST извне этой виртуальной машины .?

По умолчанию установлен Hyperledger 1.2 go SDK. Можете ли вы посоветовать нам, как представить Chaincode API как REST с go SDK?Мы знаем, что для обеспечения связи между внешним интерфейсом и Hyperledger Fabric Layer одним из способов являются вызовы gRPC, но мы не знаем, как настроить и использовать grpc для Go.

Ответы [ 3 ]

0 голосов
/ 18 февраля 2019

Вы можете использовать Gorilla mux , чтобы выставить api цепного кода в качестве покоя, используя fabric go sdk.

0 голосов
/ 18 февраля 2019

Вызов функции через цепной код может быть выполнен через CLI или с использованием SDK.

Я следовал этому учебнику chainhero для написания SDK на Голанге.

API REST не были представлены в этом учебнике.Для генерации REST API я использовал gorilla / mux в одном из моих проектов.Gorilla / mux используется в нижней части кода ниже:

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 голосов
/ 29 января 2019

Похоже, вы правильно настроили сеть фабрики Hyperledger.Как только вы сможете установить, создайте экземпляр и вызовите цепной код через CLI.

Итак, давайте подойдем к вашему вопросу, Hyperledger Fabric предоставляет нам два типа механизмов для операций через CLI и через RPC (используя grpc).Вы можете использовать SDK Hyperledger Fabric (Node SDK, Java SDK, GO SDK и т. Д.), Которые предоставляют библиотеки, реализующие метод RPC для сети Hyperledger.

Таким образом, вы можете создать веб-приложение (Rest / Soap) в любомиз поддерживаемых языков.Ниже приведены ссылки SDK: -

Узел Hyperledger Fabric SDK

Hyperledger Fabric Java SDK

Hyperledger FabricGo SDK

Ниже приведены примеры веб-приложений Hyperledger Fabric: -

Образцы Hyperledger Fabric

Я рекомендую вам пройти баланспример передачи.

...