fabric的test-network
fabric原始碼包提供1個測驗案例目錄test-network,見下圖,

在該目錄中,執行./network.sh createChannel -c mychannel,將啟動1個網路,創建名為mychannel的通道,

在這個網路中,存在peer0.org1.example.com、peer0.org2.example.com、orderer.example.com共3個節點,

配置/etc/hosts
配置/etc/hosts的目的,是讓另1個終端SDK程式能夠訪問到3個節點:peer0.org1.example.com、peer0.org2.example.com、orderer.example.com,
使用docker exec -it peer0.org1.example.com /bin/ash進入其中1個節點,

在peer0.org1的節點中執行ping peer0.org1.example.com,獲得該節點的IP地址,類似地,獲得其他2個節點的IP地址,

另開1個終端,修改/etc/hosts檔案如下,并確認,這個終端,與上述3個節點的網路是相通的,


用Go撰寫SDK案例,訪問上面的網路
新建1個目錄queryChannel,這個案例用來查詢網路中已經創建的通道名稱,在這個目錄中,新建2個檔案e2e.yaml和queryChannel.go,
組態檔e2e.yaml內容如下,
version: 1.0.0
client:
organization: Org1
logging:
level: info
cryptoconfig:
path: /root/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/test-network/organizations
credentialStore:
path: "/tmp/state-store"
cryptoStore:
path: /tmp/msp
tlsCerts:
client:
key:
path: /root/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/test-network/organizations/peerOrganizations/org1.example.com/users/User1@org1.example.com/tls/client.key
cert:
path: /root/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/test-network/organizations/peerOrganizations/org1.example.com/users/User1@org1.example.com/tls/client.crt
organizations:
Org1:
mspid: Org1MSP
cryptoPath: peerOrganizations/org1.example.com/users/{username}@org1.example.com/msp
peers:
- peer0.org1.example.com
peers:
peer0.org1.example.com:
url: peer0.org1.example.com:7051
tlsCACerts:
path: /root/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/test-network/organizations/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem
SDK程式queryChannel.go的內容如下,
package main
import (
"log"
"strings"
"github.com/hyperledger/fabric-sdk-go/pkg/client/resmgmt"
"github.com/hyperledger/fabric-sdk-go/pkg/common/errors/retry"
"github.com/hyperledger/fabric-sdk-go/pkg/common/providers/core"
"github.com/hyperledger/fabric-sdk-go/pkg/common/providers/fab"
"github.com/hyperledger/fabric-sdk-go/pkg/core/config"
"github.com/hyperledger/fabric-sdk-go/pkg/core/config/lookup"
"github.com/hyperledger/fabric-sdk-go/pkg/fabsdk"
"github.com/pkg/errors"
)
const (
orgName = "Org1"
orgAdmin = "Admin"
)
func main() {
configPath := "./e2e.yaml"
configProvider := config.FromFile(configPath)
sdk, err := fabsdk.New(configProvider)
if err != nil {
log.Fatalf("Failed to create new SDK: %s", err)
}
defer sdk.Close()
queryChannel(sdk)
}
func queryChannel(sdk *fabsdk.FabricSDK) {
configBackend, err := sdk.Config()
if err != nil {
log.Fatalf("Failed to get config backend from SDK: %s", err)
}
targets, err := orgTargetPeers([]string{orgName}, configBackend)
if err != nil {
log.Fatalf("creating peers failed: %s", err)
}
clientContext := sdk.Context(fabsdk.WithUser("User1"), fabsdk.WithOrg("Org1"))
resMgmtClient, err := resmgmt.New(clientContext)
if err != nil {
log.Fatalf("failed to query channel management client:%s", err)
}
channelQueryResponse, err := resMgmtClient.QueryChannels(
resmgmt.WithTargetEndpoints(targets[0]), resmgmt.WithRetry(retry.DefaultResMgmtOpts))
if err != nil {
log.Fatalf("QueryChannels return error: %s", err)
}
for _, channel := range channelQueryResponse.Channels {
log.Printf("*** Channel :%s\n", channel.ChannelId)
}
}
func orgTargetPeers(orgs []string, configBackend ...core.ConfigBackend) ([]string, error) {
networkConfig := fab.NetworkConfig{}
err := lookup.New(configBackend...).UnmarshalKey("organizations", &networkConfig.Organizations)
if err != nil {
return nil, errors.WithMessage(err, "failed to get organizations from config ")
}
var peers []string
for _, org := range orgs {
orgConfig, ok := networkConfig.Organizations[strings.ToLower(org)]
if !ok {
continue
}
peers = append(peers, orgConfig.Peers...)
}
return peers, nil
}
執行go mod init .初始化該案例,會下載一些依賴包,

執行go run . ,運行這個SDK案例程式,在指定網路中查詢并輸出已經安裝的通道名稱,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/94114.html
標籤:其他
上一篇:寫一個惡搞小程式
