首页天道酬勤go语言能做什么(go语言能干啥)

go语言能做什么(go语言能干啥)

admin 12-04 21:31 517次浏览

智能合约呼叫是实现DApp的关键。一个完整的DApp包括前端、后端、智能合约和区块链系统。智能合约呼叫是区块链连接前端和后端的关键。

我们先来了解一下智能契约调用的基本原理。智能合约在以太网节点的EVM运行。因此,为了调用契约,必须访问某个节点。

以后端程序为例。如果后端服务想要连接节点,有两种可能。一是双方在同一台主机上。此时,后端连接节点可以采用本地进程间通信机制或远程过程调用机制。在另一种情况下,双方不在同一台主机上,因此只能通过RPC机制进行通信。

说到RPC,读者应该对Geth的启动参数有点印象。Geth启动时,可以选择启动RPC服务,对应的默认服务端口为8545。

然后,我们来了解一下智能合约操作的流程。

智能合约的操作过程是后端服务连接到一个节点,并将智能合约的调用(事务)发送到该节点。验证交易的合法性后,节点在全网广播,由矿工打包成块表示交易确认,这样就可以认为交易完成。

就像数据库一样,每个区块链平台都会提供主流开发语言的SDK(软件开发工具包)。因为Geth本身是用Go语言编写的,如果想用Go语言连接节点进行交易,只需要将go-ethereum(Geth源代码)包直接导入到项目中就可以了,剩下的问题就是流程和API。

综上所述,智能合约被称为的两个关键点是节点和SDK。

因为IPC要求后端和节点必须在同一台主机上,所以开发人员经常采用RPC模式。除了RPC之外,Ethereum还为开发人员提供了json- rpc接口,本文不再讨论。

接下来介绍如何借助go-ethereum源代码库,使用Go语言调用智能合约。有固定的步骤。先说一般步骤,以下面的合同为例。

步骤01:编译合同以获得合同ABI(应用程序二进制接口)。点击【abi】按钮,复制合同abi信息,粘贴到文件calldemo.abi(这个文件可以使用Go语言IDE创建,文件名可以自定义,后缀最好是ABI)。

最好将calldemo.abi保存在单独的目录中。输入“ls”命令,只看到calldemo.abi文件。参考效果如下:

步骤02:获取合同地址。请注意将合同部署到Geth节点。因此,选择环境作为网络3提供商。

在“环境”选项框中选择“网络3提供商”,然后单击“部署”按钮。

部署后,合同地址为:0 xa 09209 c28 AEF 59 a 4653 b 905792 a9 a90e 78 e 7407。

Step 03:使用abigen工具(Geth工具包中的可执行程序)将智能合约编译成Go代码。Abigen工具用于将abi文件转换为Go代码,命令如下:

每个参数的含义如下。(1)abi:是指定的传入abi文件。(2)type:是指定输出文件中的基本结构类型。(3)pkg:指定输出文件的包名。(4)out:指定输出文件名。执行后,您将在代码目录中看到funcdemo.go文件。读者可以打开文件欣赏,注意不要修改。

步骤04:创建main.go并填写以下代码。请注意,部署后合同的地址将被传递到代码中的HexToAddress函数,该函数在步骤01中获得。

步骤04:为自动工程识别设置go mod。

如前所述,如果要使用Go语言调用智能合约,需要下载go-ethereum项目,可以使用下面的指令:

这个指令会自动下载go-ethereum到“$ gopath/src/github.com/ether eum/go-ether eum”,还不错。但是从1.11版本开始,Go语言增加了模块管理工程的模式。只要go mod设置好了,就不用在意下载依赖项目了。

接下来,设置模块验证和GOPROXY。命令如下:

在项目中,执行初始化,calldemo可以自定义名称。

步骤05:运行代码。执行代码,你会看到下面的效果和2020年的最终输出。

从上面的输出信息可以看出,Go语言会自动下载依赖文件,这就是go mod的神奇之处。看到2020年,相信读者也知道运行结果是正确的。

Path环境变量的配置go并发编程sync.Cond使用场景及实现原理是什么雷士灯具管理系统
lvds接口(什么是枚举类型) rpc工作过程(hadoop原理与架构)
相关内容