区块链-FISCO BCOS Go SDK使用(一)

go-sdk的安装

上一章,介绍了智能合约的编译和部署,这一章,介绍fisco-bcos go-sdk的用法,首先,先下载go-sdk源码到本地

  • Go开发环境

      • Golang >= 1.17
  • 基本开发组件

      • Git(Windows、Linux及MacOS需要)
      • Git bash(仅Windows需要)

下载go-sdk

如果用的是fisco-bcos2.x.使用以下命令

git clone -b master-FISCO-BCOS-v2 https://github.com/FISCO-BCOS/go-sdk.git
cd go-sdk/cmd/abigen/
go build

如果是fisco-bcos3.x

git clone  https://github.com/FISCO-BCOS/go-sdk.git
cd go-sdk/cmd/abigen/
go build

如果缺少库,可以提示安装,编译得到的abigen可以留作以后使用。

	go mod download github.com/FISCO-BCOS/crypto
	go get github.com/FISCO-BCOS/go-sdk/core/types
	go get github.com/FISCO-BCOS/go-sdk/cmd/abigen

bcos-c-sdk动态库准备

go-sdk v3依赖bcos-c-sdk动态库,需要先下载bcos-c-sdk动态库,然后将动态库放到指定目录下。

下载bcos-c-sdk动态库
从这里下载对应平台的动态库。我们提供了一个脚本,默认下载到/usr/local/lib目录下,如果需要下载到其他目录,可以使用脚本的-o选项

./tools/download_csdk_lib.sh

请将动态库放在/usr/local/lib目录下,后续无特殊操作。如果本机编译后在其他机器使用时,动态库放置在自定义目录,例如./lib,则go build需要添加ldflags参数,例如

go build -v -ldflags="-r ${PWD}/lib" main.go
也可以通过 export LD_LIBRARY_PATH=${PWD}/lib 设置动态库的搜索路径。

创建一个go工程

可以直接使用IDE编辑器,比如Goland
将webase里部署合约之后,生产的abi和bin分别保存到项目目录下
分别命名为:HelloWorld.abi, HelloWorld.bin
使用abigen编译abi和bin代码来得到go代码。

abigen -abi HelloWorld.abi -bin HelloWorld.bin -type hello -pkg bcos -out hello.go

这样,我们在项目下就能得到3个文件

HelloWorld.abi    HelloWorld.bin  hello.go

到这里,我们就可以直接通过hello.go里的方法去调用合约内容了。

⚠️ 这里生成的hello.go文件,不能修改,生产好之后,可能存在有些方法找不到的bug, 我们需要在go.mod文件里加上一行来解决,将go-sdk指向本地的代码,
在这里插入图片描述

调用合约

package main

import (
	"context"
	"encoding/hex"
	facegateblock "fisco_bcso_demo/webs/fiscosdk"
	"fmt"
	"github.com/FISCO-BCOS/go-sdk/client"
	"github.com/ethereum/go-ethereum/accounts/abi"
	"github.com/ethereum/go-ethereum/common"
	"strings"
)

func main() {
	// 用户私钥,可以在webase私钥管理里获取
	privateKey, _ := hex.DecodeString("edab970c8c98fc5ecd3d6e8d46c96b30d1be924d4d88928d11fa5f29d1477fd9")
	config := &client.Config{IsSMCrypto: false, GroupID: "group0",
		PrivateKey: privateKey, Host: "192.168.1.135", Port: 20200, TLSCaFile: "conf/ca.crt", TLSKeyFile: "conf/sdk.key", TLSCertFile: "conf/sdk.crt"}
	client, err := client.DialContext(context.Background(), config)
	if err != nil {
		fmt.Println("DialContext err", err)
	}
	// 合约地址
	instance, err := facegateblock.NewHelloWorld(common.HexToAddress("0xa28ac30a792a59c3cd114a87a75193c6b8278d7e"), client)
}
	// 调用合约:查询接口
	msg, err := instance.GetMsg(client.GetCallOpts())
	fmt.Println("NewMain GetMsg", err)
	// 往合约里写入数据,形成区块
	_, receipt, err := instance.SetMsg(client.GetTransactOpts(), "hello fisco")
	// 区块的高度
	fmt.Println("blockNumber:", receipt.BlockNumber)
	// 此次交易的hash
	fmt.Println("TransactionHash:", receipt.TransactionHash)
	// 区块的hash
	fmt.Println("Hash:", receipt.Hash)
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值