区块链 Go 超级账本Gateway SDK - Hyperledger Fabric Gateway SDK

Hyperledger Fabric Gateway SDK for Golang

超级账本的Go版本SDK

介绍:

网关SDK是根据超级账本的基础SDK开发出来的一个高级SDK,为我们开发部署省去很多的麻烦。
网关SDK是应用程序与区块链网络交互的一个工具,提供了一些简单的API向账本提交交易或者查询。

使用方法

这里我们使用超级账本中的fabric-sample作为操作环境。
进入到fabric-sample中的asset-transfer-basic目录下,这里有为我们提供的模板(不仅仅只是Golang的),我们照着模板修改写出我们自己的程序即可。

创建一个mian.go使用GO MOD初始化一下

go mod init
在main.go文件中导入以下包

import (
	"fmt"
	"io/ioutil"
	"log"
	"os"
	"path/filepath"

	"github.com/hyperledger/fabric-sdk-go/pkg/core/config"
	"github.com/hyperledger/fabric-sdk-go/pkg/gateway"
)
创建一个钱包
wallet, err := gateway.NewFileSystemWallet("wallet")
	if err != nil {
		log.Fatalf("Failed to create wallet: %v", err)
	}
向钱包中添加用户的证书,生成目录等
if !wallet.Exists("appUser") {
		err = populateWallet(wallet)  // 方法写在最下面
		if err != nil {
			log.Fatalf("Failed to populate wallet contents: %v", err)
		}
	}
获取链接配置文件
ccpPath := filepath.Join(
		"..",
		"..",
		"test-network",
		"organizations",
		"peerOrganizations",
		"org1.example.com",
		"connection-org1.yaml",
	)
从钱包中获取身份,创立链接
	gw, err := gateway.Connect(
		gateway.WithConfig(config.FromFile(filepath.Clean(ccpPath))),
		gateway.WithIdentity(wallet, "appUser"),
	)
	if err != nil {
		log.Fatalf("Failed to connect to gateway: %v", err)
	}
	defer gw.Close()
连接到通道
network, err := gw.GetNetwork("mychannel")
	if err != nil {
		log.Fatalf("Failed to get network: %v", err)
	}
获取链上代码(智能合约)名称
contract := network.GetContract("basic")
进行交易
result, err := contract.SubmitTransaction("InitLedger")
	if err != nil {
		log.Fatalf("Failed to Submit transaction: %v", err)
	}
提交查询
result, err = contract.EvaluateTransaction("ReadAsset", "asset13")
// 返回结果[]byte,进行类型强制转换
log.Println(string(result))
构造钱包内部的方法populateWallet
func populateWallet(wallet *gateway.Wallet) error {
	log.Println("============ Populating wallet ============")
	credPath := filepath.Join(
		"..",
		"..",
		"test-network",
		"organizations",
		"peerOrganizations",
		"org1.example.com",
		"users",
		"User1@org1.example.com",
		"msp",
	)

	certPath := filepath.Join(credPath, "signcerts", "cert.pem")
	// 证书文件
	cert, err := ioutil.ReadFile(filepath.Clean(certPath))
	if err != nil {
		return err
	}

	keyDir := filepath.Join(credPath, "keystore")
	// 私钥文件
	files, err := ioutil.ReadDir(keyDir)
	if err != nil {
		return err
	}
	if len(files) != 1 {
		return fmt.Errorf("keystore folder should have contain one file")
	}
	keyPath := filepath.Join(keyDir, files[0].Name())
	key, err := ioutil.ReadFile(filepath.Clean(keyPath))
	if err != nil {
		return err
	}

	identity := gateway.NewX509Identity("Org1MSP", string(cert), string(key))

	return wallet.Put("appUser", identity)
}
可以根据自己的需求修改这份模板
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值