应用程序开发(go)基于fabric-gateway-go项目进行开发。这里以fabric-samples/asset-transfer-basic/application-gateway-go为例进行修改说明。
基本思路:应用程序主要是以org1组织中的证书和密钥,登录远程测试环境中的链码服务。
1 fabric-gatewaygithub:
https://github.com/hyperledger/fabric-gateway
开发环境:go 1.16
编辑器:Goland
第1步:新建文件夹crypto-config,从fabric测试环境中fabric-samples/test-network/
下的organizations整个目录拷贝到``crypto-config`下。
主要是organizations/peerOrganizations/org1.example.com下的文件。
第2步:go.mod引入fabric-gateway的依赖:
require (
github.com/hyperledger/fabric-gateway v1.0.0
第3步:设置各种参数:
const (
peerEndpoint = "127.0.0.1:7051"
mspID = "Org1MSP"
cryptoPath = "./crypto-config/organizations/peerOrganizations/org1.example.com"
certPath = cryptoPath + "/users/User1@org1.example.com/msp/signcerts/User1@org1.example.com-cert.pem"
keyPath = cryptoPath + "/users/User1@org1.example.com/msp/keystore/"
tlsCertPath = cryptoPath + "/peers/peer0.org1.example.com/tls/ca.crt"
gatewayPeer = "peer0.org1.example.com"
channelName = "mychannel"
chaincodeName = "basic"
)
其中peerEndpoint 中的IP地址为远程测试环境的IP。
注意:因为版本不断变化,一定要保证文件的路径没有问题。如不一致,修改即可。
第4步:具体编码:
1)创建远程链码的gRPC的连接,主要函数:
connection, err := grpc.Dial(peerEndpoint, grpc.WithTransportCredentials(transportCredentials))
2)创建org1的身份认证X509Identity:
id, err := identity.NewX509Identity(mspID, certificate)
创建签名sign:
sign, err := identity.NewPrivateKeySign(privateKey)
3)根据身份和签名,连接远程链码的网关:
gateway, err := client.Connect(
id,
client.WithSign(sign),
client.WithClientConnection(clientConnection),
// Default timeouts for different gRPC calls
client.WithEvaluateTimeout(5*time.Second),
client.WithEndorseTimeout(15*time.Second),
client.WithSubmitTimeout(5*time.Second),
client.WithCommitStatusTimeout(1*time.Minute),
)
4)根据通道获取到网络对象:
network := gateway.GetNetwork(channelName)
5)根据链码名称获取到链码:
contract := network.GetContract(chaincodeName)
6)然后就可以调用链码的各种接口:
fmt.Println("initLedger:")
initLedger(contract)
fmt.Println("getAllAssets:")
getAllAssets(contract)
fmt.Println("createAsset:")
createAsset(contract)
fmt.Println("readAssetByID:")
readAssetByID(contract)
fmt.Println("transferAssetAsync:")
transferAssetAsync(contract)
fmt.Println("exampleErrorHandling:")
exampleErrorHandling(contract)
最后保证编译通过:
注意:peerEndpoint 要修改为远程链码测试环境的IP。
代码详见:
https://gitee.com/linghufeixia/fabric-simple
application-gateway-go 工程。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)