使用Go语言和以太坊智能合约交互

尽管最近遇到了些麻烦,但以太坊仍然是区块链领域内智能合约的最大参与者,这似乎不会很快改变。

在我看来,技术本身具有很大的潜力,是从学术的角度看很有意思,但正如上面提到的问题和之前的许多问题是区块链技术方面的,智能合约,特别是具有Solidity的以太坊生态系统还是不太成熟的,并没有为prime-time和生产用例做好准备。

然而,这是一个学习和了解这项技术的好时机,并且当它达到严格应用程序的可接受成熟度前,需要做好准备。

在我之前关于Solidity的帖子中,我创建了一个带有简单的Winner-Takes-All Crowdfunding合约的小应用程序。在这篇文章中,我们将用到其中的contract.sol,看看我们是否可以使用Go部署它并与之交互。

为什么是go?好问题,go语言是令人惊讶的而且使用最广泛的以太坊客户端使用go写的,这意味着有一个很好的生态系统使用已经转为具有很好的功能,如代码生成和可重复使用的助手和智能合约互动的共享库。

在这个例子中,我们将不使用真实的区块链作为部署目标,而是使用由go-ethereum,所以我们可以安全地测试并没有花费任何金钱实验提供的SimulatedBackend。

智能合约本身非常简单:我不会详细介绍它的功能或工作方式,因为已经涵盖了这一点。可以说,合约部署有3个参数:

  • 项目的最低入场费。
  • 提交新项目的截止日期。
  • 支持项目的截止日期。

然后,在第一阶段,可以使用名称和网址提交项目,其中至少包含交易的最低费用。在第二阶段,可以通过将以太发送到合约中的地址来支持项目。

但是,在这篇文章中,我们将重点关注:

  • 部署合约
  • 从合约中读取数据
  • 与合约互动(交易)
  • 通过地址实例化已部署的合约

我们将在Go和70行代码中完成所有操作。让我们开始吧!

代码示例

为了能够跟踪,你需要一些东西。首先也是最重要的是,你需要solc Solidity编译器。

然后,只需获取go-ethereum并构建它:

go get github.com/ethereum/go-ethereum
cd $GOPATH/src/github.com/ethereum/go-ethereum/
make
make devtools

好吧,使用solc和geth devtools,我们可以从生成contract.sol文件的Go版本开始,该文件包含我们的智能合约:

abigen --sol=Contract.sol --pkg=main --out=contract.go

生成的代码看这里

如你所见,我们有部署和实例化合约的方法,以及所有公共合约方法到Go的映射。

下一步是将合约部署到模拟后端。

为此,需要进行一些设置。如上所述,为了简单起见,我们将使用SimulatedBackend作为我们的目标区块链,但在本文的最后,将有一个关于如何使用testnet甚至真正的以太坊区块链进行此操作的简短部分。

使用go-ethereum的一些依赖关系,我们可以开始设置:

import(
    "fmt"
    "log"
    "math/big"
    "time"

    "github.com/ethereum/go-ethereum/account
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值