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里的方法去调用合约内容了。文章来源:https://www.toymoban.com/news/detail-806724.html
⚠️ 这里生成的hello.go文件,不能修改,生产好之后,可能存在有些方法找不到的bug, 我们需要在go.mod文件里加上一行来解决,将go-sdk指向本地的代码,
文章来源地址https://www.toymoban.com/news/detail-806724.html
调用合约
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)
到了这里,关于区块链-FISCO BCOS Go SDK使用(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!