我们在Amazon Managed Blockchain网络上配置了hyperledger Fabric 1.2。我们按照8个步骤指导managed-blockchain-get-started-tutorial配置此设置。我们已经配置了网络,成员和对等,并且还设置了VPC服务端点。 Fabric Client VM也在AWS Linux 2 AMI上配置,我们还能够安装/启动和调用示例链代码(如Set 7: Install and Run chaincode所述)。现在我们的包版是如何将API公开为rest,以便可以从Fabric客户端VM外部访问API。我们正在奋斗很多天。
根据AWS Tutorial(步骤7.4:调用Chaincode)我们使用以下命令调用链代码。
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作为来自此VM外部的REST调用。
默认情况下,安装了Hyperledger 1.2 go SDK,您能否告诉我们如何使用go SDK将Chaincode API公开为REST?我们知道,为了实现前端和Hyperledger Fabric层之间的通信,其中一种方法是gRPC调用,但不知道如何为Go配置和使用grpc。
通过链代码调用函数可以通过CLI或使用SDK完成。
我跟着这个chainhero tutorial在Golang中编写SDK。
本教程未公开REST API。为了生成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))
}
根据您的解释,您可以正确设置超级分层结构网络。您可以通过CLI安装,实例化和调用链代码。
因此,让我们来看看,Hyperledger Fabric为我们提供了两种类型的操作机制,通过CLI和RPC(使用grpc)。您可以使用Hyperledger结构SDK(Node SDK,Java SDK,GO SDK等),它提供了为Hyperledger网络实现RPC方法的库。
因此,您可以使用任何支持的语言构建Web应用程序(Rest / Soap)。以下是SDK的链接: -
以下是Hyperledger Fabric网络应用程序的示例: -
我会建议您通过余额转移示例。
您可以使用Gorilla mux将chaincode api暴露为使用fabric go sdk进行休息。