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)在控制台执行:

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

在这里插入图片描述

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

3.pem格式私钥生成:

在这里插入图片描述

在这里插入图片描述

4.拷贝节点证书文件:

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

在这里插入图片描述

(2)粘贴:

在这里插入图片描述

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

  1. [Network]
  2. #type rpc or channel
  3. Type="channel"
  4. # 三个节点证书,使用相对路径
  5. CAFile="resources/sdk/ca.crt"
  6. Cert="resources/sdk/sdk.crt"
  7. Key="resources/sdk/sdk.key"
  8. # if the certificate context is not empty, use it, otherwise read from the certificate file
  9. # multi lines use triple quotes
  10. CAContext=''''''
  11. KeyContext=''''''
  12. CertContext=''''''
  13. [[Network.Connection]]
  14. NodeURL="192.168.81.128:20200" # 节点的地址
  15. GroupID=1 # 群组id
  16. # [[Network.Connection]]
  17. # NodeURL="127.0.0.1:20200"
  18. # GroupID=2
  19. [Account]
  20. # only support PEM format for now
  21. KeyFile="resources/accounts/webase_admin.pem" #使用什么账户调用合约
  22. DynamicKey=false #是否启用动态私钥(是:使用自己生成的私钥,发送交易要携带key。否:默认使用自己导入进来的私钥(就是KeyFile中配置的值))
  23. [Chain]
  24. ChainID=1 #链id
  25. SMCrypto=false # 非国密
  26. [log]
  27. Path="./"

在这里插入图片描述

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

(1)部署合约:

注意事项:

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

  1. pragma solidity >=0.4.24 <0.6.11;
  2. contract HelloWorld {
  3. string name;
  4. constructor() public {
  5. name = "Hello, World!";
  6. }
  7. function get() public view returns (string memory) {
  8. return name;
  9. }
  10. function set(string memory n) public view returns(bool) {
  11. name = n;
  12. return true;
  13. }
  14. }

在这里插入图片描述

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

(3)填写配置文件:

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

  1. contracts:contract1:name:address:abi:bin:

在这里插入图片描述

三,测试

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

(2)编写测试样例:

  1. package main
  2. import("fmt""github.com/kkvbAugust/fiscobcos-go/core""github.com/kkvbAugust/fiscobcos-go/tools")const(
  3. HelloWorld ="contract1")funcmain(){
  4. core.InitConf("resources/settings.yaml")
  5. core.InitClient("resources/config.toml")
  6. core.InitSession(HelloWorld)
  7. s1 :=new(string)
  8. tools.SendCall(HelloWorld,"get", s1)
  9. transaction := tools.SendTransaction(HelloWorld,"set","Hello,FISCO-BCOS")
  10. s2 :=new(string)
  11. tools.SendCall(HelloWorld,"get", s2)
  12. fmt.Println("SendCall1==>",*s1)
  13. fmt.Println("transaction2==>", transaction)
  14. fmt.Println("SendCall2==>",*s2)}

在这里插入图片描述

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

(4)执行命令:go mod tidy

  1. 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)在不使用动态私钥的情况:

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

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

  1. SendTransaction (需要传入私钥) (作用:往链上存储信息,注意:被调用合约函数的返回值最好设定为bool值。)
  2. 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中的工具包版本)”的评论:

还没有评论