go语言程序化交易 go语言gui编程( 三 )


现在我们迭代所有的日志并设置一个switch语句来按事件日志类型过滤:
现在要解析 LogFill  , 我们将使用 abi.Unpack 将原始数据类型解析为我们自定义的日志类型结构体 。Unpack不会解析 indexed 事件类型,因为这些它们存储在 topics 下,所以对于那些我们必须单独解析 , 如下例所示:
对于 LogCancel 类似:
最后是 LogError :
将它们放在一起并运行我们将看到以下输出:
将解析后的日志输出与etherscan上的内容进行比较:
命令
Exchange.sol
event_read_0xprotocol.go
这些示例使用的solc版本
用Go来做以太坊开发④智能合约在这个章节中go语言程序化交易我们会介绍如何用Go来编译go语言程序化交易 , 部署 , 写入和读取智能合约 。
与智能合约交互,我们要先生成相应智能合约的应用二进制接口ABI(application binary interface),并把ABI编译成我们可以在Go应用中调用的格式 。
第一步是安装Solidity编译器( solc ).
Solc 在Ubuntu上有snapcraft包 。
Solc在macOS上有Homebrew的包 。
其他的平台或者从源码编译的教程请查阅官方solidity文档 install guide .
我们还得安装一个叫 abigen 的工具 , 来从solidity智能合约生成ABI 。
假设您已经在计算机上设置了Go,只需运行以下命令即可安装 abigen 工具 。
我们将创建一个简单的智能合约来测试 。学习更复杂的智能合约,或者智能合约的开发的内容则超出了本书的范围 。我强烈建议您查看 truffle framework来学习开发和测试智能合约 。
这里只是一个简单的合约,就是一个键/值存储,只有一个外部方法来设置任何人的键/值对 。我们还在设置值后添加了要发出的事件 。
虽然这个智能合约很简单,但它将适用于这个例子 。
现在我们可以从一个solidity文件生成ABI 。
它会将其写入名为“Store_sol_Store.abi”的文件中
现在让我们用 abigen 将ABI转换为我们可以导入的Go文件 。这个新文件将包含我们可以用来与Go应用程序中的智能合约进行交互的所有可用方法 。
为了从Go部署智能合约,我们还需要将solidity智能合约编译为EVM字节码 。EVM字节码将在事务的数据字段中发送 。在Go文件上生成部署方法需要bin文件 。
现在我们编译Go合约文件,其中包括deploy方法,因为我们包含了bin文件 。
在接下来的课程中,我们将学习如何部署智能合约,然后与之交互 。
Commands
Store.sol
solc version used for these examples
如果go语言程序化交易你还没看之前的章节 , 请先学习 编译智能合约的章节 因为这节内容,需要先了解如何将智能合约编译为Go文件 。
假设go语言程序化交易你已经导入从 abigen 生成的新创建的Go包文件,并设置ethclient,加载您的私钥,下一步是创建一个有配置密匙的交易发送器(tansactor) 。首先从go-ethereum导入 accounts/abi/bind 包,然后调用传入私钥的 NewKeyedTransactor。然后设置通常的属性,如nonce,燃气价格 , 燃气上线限制和ETH值 。
如果你还记得上个章节的内容, 我们创建了一个非常简单的“Store”合约,用于设置和存储键/值对 。生成的Go合约文件提供了部署方法 。部署方法名称始终以单词 Deploy 开头,后跟合约名称,在本例中为 Store。
deploy函数接受有密匙的事务处理器 , ethclient,以及智能合约构造函数可能接受的任何输入参数 。我们测试的智能合约接受一个版本号的字符串参数 。此函数将返回新部署的合约地址,事务对象,我们可以交互的合约实例,还有错误(如果有) 。

推荐阅读