一学就会,手把手教你用Go语言调用智能合约智能合约调用是实现一个 DApp 的关键go语言binary包,一个完整的 DApp 包括前端、后端、智能合约及区块 链系统go语言binary包,智能合约的调用是连接区块链与前后端的关键 。
go语言binary包我们先来go语言binary包了解一下智能合约调用的基础原理 。智能合约运行在以太坊节点的 EVM 中 。因此要 想调用合约必须要访问某个节点 。
【go语言binary包 go语言的包】以后端程序为例go语言binary包,后端服务若想连接节点有两种可能,一种是双 方在同一主机 , 此时后端连接节点可以采用 本地 IPC(Inter-Process Communication,进 程间通信)机制,也可以采用 RPC(Remote Procedure Call , 远程过程调用)机制;另 一种情况是双方不在同一台主机,此时只能采用 RPC 机制进行通信 。
提到 RPC,读者应该对 Geth 启动参数有点印象,Geth 启动时可以选择开启 RPC 服务,对应的 默认服务端口是 8545 。。
接着,我们来了解一下智能合约运行的过程 。
智能合约的运行过程是后端服务连接某节点,将 智能合约的调用(交易)发送给节点,节点在验证了交易的合法性后进行全网广播 , 被矿工打包到 区块中代表此交易得到确认,至此交易才算完成 。
就像数据库一样,每个区块链平台都会提供主流 开发语言的 SDK(Software Development Kit,软件开发工具包),由于 Geth 本身就是用 Go 语言 编写的,因此若想使用 Go 语言连接节点、发交易 , 直接在工程内导入 go-ethereum(Geth 源码) 包就可以了,剩下的问题就是流程和 API 的事情了 。
总结一下,智能合约被调用的两个关键点是节点和 SDK 。
由于 IPC 要求后端与节点必须在同一主机,所以很多时候开发者都会采用 RPC 模式 。除了 RPC,以太坊也为开发者提供了 json- rpc 接口 , 本文就不展开讨论了 。
接下来介绍如何使用 Go 语言,借助 go-ethereum 源码库来实现智能合约的调用 。这是有固定 步骤的 , 我们先来说一下总体步骤,以下面的合约为例 。
步骤 01:编译合约,获取合约 ABI(Application Binary Interface,应用二进制接口) 。单击【ABI】按钮拷贝合约 ABI 信息 , 将其粘贴到文件 calldemo.abi 中(可使用 Go 语言IDE 创建该文件,文件名可自定义,后缀最好使用 abi) 。
最好能将 calldemo.abi 单独保存在一个目录下 , 输入“ls”命令只能看到 calldemo.abi 文件,参 考效果如下:
步骤 02:获得合约地址 。注意要将合约部署到 Geth 节点 。因此 Environment 选择为 Web3 Provider 。
在【Environment】选项框中选择“Web3 Provider” , 然后单击【Deploy】按钮 。
部署后,获得合约地址为:0xa09209c28AEf59a4653b905792a9a910E78E7407 。
步骤 03:利用 abigen 工具(Geth 工具包内的可执行程序)编译智能合约为 Go 代码 。abigen 工具的作用是将 abi 文件转换为 Go 代码 , 命令如下:
其中各参数的含义如下 。(1)abi:是指定传入的 abi 文件 。(2)type:是指定输出文件中的基本结构类型 。(3)pkg:指定输出文件 package 名称 。(4)out:指定输出文件名 。执行后,将在代码目录下看到 funcdemo.go 文件,读者可以打开该文件欣赏一下,注意不要修改它 。
步骤 04:创建 main.go,填入如下代码 。注意代码中 HexToAddress 函数内要传入该合约部署后的地址 , 此地址在步骤 01 中获得 。
步骤 04:设置 go mod,以便工程自动识别 。
前面有所提及,若要使用 Go 语言调用智能合约,需要下载 go-ethereum 工程,可以使用下面 的指令:
该指令会自动将 go-ethereum 下载到“$GOPATH/src/github.com/ethereum/go-ethereum”,这样还算 不错 。不过,Go 语言自 1.11 版本后,增加了 module 管理工程的模式 。只要设置好了 go mod , 下载 依赖工程的事情就不必关心了 。
推荐阅读
- 华为荣耀x1怎么升级鸿蒙系统,华为荣耀x1怎么升级鸿蒙系统30
- 拍摄蔷薇花带什么镜头,拍摄蔷薇花带什么镜头好
- 玩电脑用什么cpu好,电脑什么处理器玩游戏性价比高
- 如何正确的安装ppt,如何正确的安装铅板
- java代码证书怎么使用 java证书考试在哪里报名
- 硬盘坏了怎么开机,硬盘坏了电脑开不了机怎么修复
- 如何让品牌营销少走弯路,品牌如何做好自己的营销
- 怎么设置钉钉直播不看回放,钉钉上自己发起的直播怎么不让别人看到回放
- go语言连数据库 go数据库使用指南