0


FISCOBCOS中的GoSDK操作---(引入github中的工具包版本)

FISCOBCOS中的GoSDK操作—(引入github上的工具包版本)

文章目录

文档操作记录
内容作者时间版本号联系方式文档创建凌零岭在哪,Flatsail,BugDog2024-11-271.0email:2040575063@qq.com
背景:基于FISCOBCOS(2.9.1)提供的GoSDK进行二次开发,再次封装成了一个工具包,简化官方文档中的操作。
相关资源:
https://gitee.com/kkvb/fiscobcos-go
https://github.com/kkvbAugust/fiscobcos-go

参考文档:https://fisco-bcos-documentation.readthedocs.io/zh-cn/latest/docs/sdk/go_sdk/index.html
使用FiscoBcos官方工具库: https://github.com/FISCO-BCOS/go-sdk/tree/master-FISCO-BCOS-v2

一,GoWEB项目创建:

1.新建项目:
在这里插入图片描述

2.项目路径(随自己心意):

在这里插入图片描述

3.生成成功:

在这里插入图片描述

二,项目书写:

1.依赖导入

(1)在控制台执行:

go get -u github.com/kkvbAugust/fiscobcos-go

在这里插入图片描述

2.配置资源文件夹:
在这里插入图片描述

3.pem格式私钥生成:

在这里插入图片描述

在这里插入图片描述

4.拷贝节点证书文件:

(1)将下面的图片中的文件复制:

在这里插入图片描述

(2)粘贴:

在这里插入图片描述

5.网络配置文件书写(下面给出的配置需要修改):

[Network]
#type rpc or channel
Type="channel"
# 三个节点证书,使用相对路径
CAFile="resources/sdk/ca.crt"
Cert="resources/sdk/sdk.crt"
Key="resources/sdk/sdk.key"
# if the certificate context is not empty, use it, otherwise read from the certificate file
# multi lines use triple quotes
CAContext=''''''
KeyContext=''''''
CertContext=''''''

[[Network.Connection]]
NodeURL="192.168.81.128:20200"  # 节点的地址
GroupID=1  # 群组id
# [[Network.Connection]]
# NodeURL="127.0.0.1:20200"
# GroupID=2

[Account]
# only support PEM format for now
KeyFile="resources/accounts/webase_admin.pem"  #使用什么账户调用合约
DynamicKey=false #是否启用动态私钥(是:使用自己生成的私钥,发送交易要携带key。否:默认使用自己导入进来的私钥(就是KeyFile中配置的值))

[Chain]
ChainID=1 #链id
SMCrypto=false # 非国密

[log]
Path="./"

在这里插入图片描述

6.智能合约配置文件书写

(1)部署合约:

注意事项:

​ 在WeBASE-Front上编译合约获得abi和bin,部署合约获得address。

pragma solidity >=0.4.24 <0.6.11;

contract HelloWorld {
    string name;

    constructor() public {
        name = "Hello, World!";
    }

    function get() public view returns (string memory) {
        return name;
    }

    function set(string memory n) public view returns(bool) {
        name = n;
        return true;
    }
}

在这里插入图片描述

(2)这里的abi要将其中的 " 替换成 ",可以打开一个记事本,放入abi,使用快捷键ctrl+f, 全部替换。
在这里插入图片描述

(3)填写配置文件:

注意事项:(这里的设计只是一个键(“contract1”,或者"contract2"、“contract3”…)对应一个结构体(智能合约的name,address,abi,bin)的数据结构)

contracts:contract1:name:address:abi:bin:

在这里插入图片描述

三,测试

(1)创建目录及文件:
在这里插入图片描述

(2)编写测试样例:

package main

import("fmt""github.com/kkvbAugust/fiscobcos-go/core""github.com/kkvbAugust/fiscobcos-go/tools")const(
    HelloWorld ="contract1")funcmain(){
    core.InitConf("resources/settings.yaml")
    core.InitClient("resources/config.toml")
    core.InitSession(HelloWorld)
    s1 :=new(string)
    tools.SendCall(HelloWorld,"get", s1)
    transaction := tools.SendTransaction(HelloWorld,"set","Hello,FISCO-BCOS")
    s2 :=new(string)
    tools.SendCall(HelloWorld,"get", s2)

    fmt.Println("SendCall1==>",*s1)
    fmt.Println("transaction2==>", transaction)
    fmt.Println("SendCall2==>",*s2)}

在这里插入图片描述

(3)运行:
在这里插入图片描述

(4)执行命令:go mod tidy

go mod tidy

在这里插入图片描述

查看go.mod:

在这里插入图片描述

(5)再次运行:

在这里插入图片描述
通过WeBASE导出的私钥发送交易

注意事项:

代码中不展示具体的调用函数过程,但会通过私钥计算出公钥和地址,与webase上导出的文件作对比

具体函数调用过程,只需要通过将各类型的私钥,转换成*ecdsa.PrivateKey类型的私钥,就可以调用SendCallByKey和SendTransactionByKey(将私钥作为参数传入就行)。

详细内容见FISCOBCOS中的GoSDK操作—(搭建项目版本) ,注意由于两个文档的目录结构不同,要注意函数在哪个包下。

FISCOBCOS中的GoSDK操作—(搭建项目版本):
文档:
https://blog.csdn.net/bjll123/article/details/143850759
代码:
https://gitee.com/kkvb/fisco-go-sdk-demo

四,小结:

1.发送交易的函数:

(1)在不使用动态私钥的情况:

SendTransaction  (作用:往链上存储信息,注意:合约函数的返回值最好设定为bool值。)
SendCall   (作用:获取链上信息,注意:合约函数的传入参数和返回值需要定义模型 )

(2)在使用动态私钥的情况:

SendTransaction (需要传入私钥) (作用:往链上存储信息,注意:被调用合约函数的返回值最好设定为bool值。)
SendCall  (需要传入私钥) (作用:获取链上信息,注意:合约函数的传入参数和返回值需要定义模型。 )

2.合约类型和go语言中的类型对应

合约中传入和返回参数Go语言中使用对应类型stringstring或者stringuint256big.Intuint8uint8addresscommon.address(用这个包:github.com/ethereum/go-ethereum/common)boolbooluint256[][]big.Intstring[][]string结构体(例如:User)User结构体数组(例如:User[])*[]User
注意事项:

go语言中声明传入、传出的参数的模型时,可以直接:new一个类型 赋值给 变量

例如:num:= new(big.Int)

五.参与贡献

凌零岭在哪,Flatsail,Bugdog

标签: 区块链 golang

本文转载自: https://blog.csdn.net/bjll123/article/details/144072061
版权归原作者 凌零岭在哪 所有, 如有侵权,请联系我们删除。

“FISCOBCOS中的GoSDK操作---(引入github中的工具包版本)”的评论:

还没有评论