参考文档完成链的搭建和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,需要注意环境变量配置等等,其余思路大体相同。

1453

被折叠的 条评论
为什么被折叠?



