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

应用程序开发(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 工程。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值