fabric 2.4.2-simple(2)应用程序开发(go)

fabric 2.4.2-simple(2)应用程序开发(go),第1张

应用程序开发(go)基于fabric-gateway-go项目进行开发。这里以fabric-samples/asset-transfer-basic/application-gateway-go为例进行修改说明。

基本思路:应用程序主要是以org1组织中的证书和密钥,登录远程测试环境中的链码服务。

1 fabric-gateway

github:
https://github.com/hyperledger/fabric-gateway

2 本地开发

开发环境: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 工程。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/990374.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存