fisco-bcos-go-sdk-v3配置

参考文档完成链的搭建和webase-front搭建,需要注意的是v2版本的webase和v3的链不兼容,应切换到webase-lab版本,具体排错见问题记录5

2. 搭建第一个区块链网络 — FISCO BCOS 3.0 v3.11.0 文档

https://webasedoc.readthedocs.io/zh-cn/lab/docs/WeBASE-Install/developer.html

1.安装go环境

同之前的文档

2.拉取go-sdk

参考文档:FISCO-BCOS/go-sdk,整体流程差不多,不过控制台搭建需要多拉一个csdk库,代码解析配置文件有些许不同

git clone https://gitee.com/FISCO-BCOS/go-sdk.git

与v2不同的是,v3版本的go-sdk依赖于bcos_csdk,可以看到go-sdk/tools目录下有这个安装脚本,或者参考文档从源仓库拉取该项目(直接拉取可能遇到网络问题,自行解决)

运行该脚本,此库被放到了usr/local/lib下,可以参考文档继续配置控制台,但这里有了webase用不上,所以略过控制台搭建。

进入go-sdk/v3/cmd/abigen目录下go build,build好了会出现绿色的abigen,这一步与v2没区别

文档中给了solc的工具,我们还是从webase中复制粘贴abi和bin,所以也略过。

与搭建v2项目类似,新建project目录,在此目录下新建demo目录放置合约的abi和bin,并把abigen移动到project目录下,

准备好以上这些,可以生成HelloWorld.go文件。

../abigen -abi HelloWorld.abi -type HelloWorld -pkg main -out HelloWorld.go

3.编写main.go

在demo目录下新建main.go,官方提供的是从部署到调用的代码,我们直接在webase部署好把地址拿过来即可,粘贴以下代码,注意地址和私钥替换成自己的,也不要忘记把节点目录下的证书文件也拷贝到当前目录。

package main

import (
	"context"
	"encoding/hex"
	"fmt"
	"github.com/FISCO-BCOS/go-sdk/v3/client"
	"github.com/ethereum/go-ethereum/common"
	"log"
)

func main() {
	privateKey, _ := hex.DecodeString("145e247e170ba3afd6ae97e88f00dbc976c2345d511b0f6713355d19d8b80b58")
	config := &client.Config{IsSMCrypto: false, GroupID: "group0",
		PrivateKey: privateKey, Host: "127.0.0.1", Port: 20200, TLSCaFile: "./ca.crt", TLSKeyFile: "./sdk.key", TLSCertFile: "./sdk.crt"}
	client, err := client.DialContext(context.Background(), config)
	if err != nil {
		log.Fatal(err)
	}

	contractAddress := common.HexToAddress("0x6849f21d1e455e9f0712b1e99fa4fcd23758e8f1")
	instance,err := NewHelloWorld(contractAddress,client)
	if err != nil {
		log.Fatal(err)
	}

	fmt.Println("================================")
	helloSession := HelloWorldSession{Contract: instance, CallOpts: *client.GetCallOpts(), TransactOpts: *client.GetTransactOpts()}



	ret, err := helloSession.Get()
	if err != nil {
		fmt.Printf("hello.Get() failed: %v", err)
		return
	}
	fmt.Println("================================")

	oldValue,  receipt, err := helloSession.Set("hello fisco")
	fmt.Println("old value is: ", oldValue)
	if err != nil {
		log.Fatal(err)
	}

	fmt.Printf("transaction hash of receipt: %s\n", receipt.GetTransactionHash())

	ret, err = helloSession.Get()
	if err != nil {
		fmt.Printf("hello.Get() failed: %v", err)
		return
	}
	fmt.Printf("Get: %s\n", ret)

}

与步骤二类似go mod init demo,go mod tidy,go build去拉取打包项目,完整目录结构如下(也就比v2的用例中少个config.toml),这个log目录是测试中运行一次后生成的不用管。

再运行生成的demo文件,发现报错。

这是因为虽然我们下载了csdk依赖,但没有配环境变量

参考以下命令

//打开配置文件
vi ~/.bashrc
//在文件末尾添加这一行,路径就是csdk存放路径
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
//保存文件退出,在命令行运行此命令生效
source ~/.bashrc

再运行demo,可以见到如下输出,这里还提示缺少clog.ini根据需要补充,不影响测试用例的运行结果输出。

检查webase,发现新增一条交易,证明set调用完成,也能查询到返回的交易哈希。

综上:对比v2的写法,主要体现在配置文件解析代码也就是初始化client有所不同,这里取消了读取config.toml的写法,同时项目运行依赖csdk,需要注意环境变量配置等等,其余思路大体相同。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吃哧哧·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值