阅读更多

0顶
0踩

行业应用
引用
原文:Interacting with Ethereum Smart Contracts using Go)
作者:[zupzup]
翻译:Diwei

译者注:本文主要介绍使用Go语言与Ethereum智能合约进行交互。以下为译文

尽管最近出现了麻烦,但Ethereum仍然是区块链空间中实现智能合约最重要的系统,而且这种情况似乎不太可能很快改变。

在我看来,技术本身具有很大的潜力,从学术的角度来看是非常有趣的,但正如前面提到的问题,之前展示出来了很多问题,区块链技术,智能合约,特别是带有Solidity的Ethereum生态系统是非常不成熟的,而且也没有准备好的黄金时段/生产用例。

然而,这是学习和了解这种技术的一个很好的机会,能够在应用程序奔溃前提前做准备。

在我之前的一篇文章中,我创建了一个小型应用程序,其中包含一个简单的Winner-Takes-All Crowdfunding合约。在这篇文章中,我们将接受这份合约,并且去引用contract.sol这个合约,看看我们是否可以使用Go语言进行部署和交互。

为什么用GO语言?其中一个原因是,GO语言的作用很强大。最广泛使用的Ethereum客户端是用Go语言写的,这意味着有一个很好的生态系统,可以与Ethereum和智能契约进行交互,如从共享库生成可重用的代码。

在这个示例中,我们不会使用真正的区块链作为部署目标,而是使用go - ethereum提供的模拟后端,这样我们就可以安全地进行测试和实验,而不用花任何钱。

智能合约本身很简单(我不会详细介绍绍它的功能或工作原理),只要解释合约中部署了3个参数就够了,3个参数如下:
  • 项目最低入会费
  • 提交新项目的最后期限
  • 支持项目的最后期限
在第一阶段,项目可以使用名称和网址提交,参数至少包括最低费用。 在第二阶段,可以通过向合作伙伴的发送地址来支持项目。

然而,在这篇文章中,我们将关注:
  • 部署合约
  • 从合约中读取数据
  • 与合约(交易)的交互
  • 通过地址实例化已部署的合约
我们会用70行代码完成这些。让我们开始吧!

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

然后,使用go - ethereum并建立它:

我们可以通过solc和geth devtools,然后从生成合约的go - version开始。我们的智能合同的sol文件:

生成的代码看起来像这样。

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

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

为此,需要进行一些设置。 如上所述,为了简单起见,我们将使用SimulatedBackend作为我们的目标块链,在这篇文章的最后,将有一个关于如何使用testnet甚至是真实的Etherey块链接的简短部分。

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

我们只需创建一个密钥,创建一个以太网的Genesis帐户,并启动模拟后端,该后端返回一个bind.ContractBackend。现在我们可以使用生成的DeployWinnerTakesAll方法开始部署合约。

我们传递的是一个auth对象,它代表我们的身份,参数包括the backend sim和 Minimum Entry Fee,Project Deadline和 Campaign Deadline,这些参数每一项都使用一个bigInt。该方法返回合约将被部署到的地址,以及合约的句柄和一个错误。还会返回一个事务对象,但我们不会在这里处理它。

既然已经部署了合约,我们就应该能够与它交互。例如,我们可以检查我们发送的最后期限是否正确地设置在合约中:

但是,如果执行此操作,则返回< nil >。那是因为我们的合约还没有真正开采。如果我们使用真实的网络作为后端,我们就必须等到它发生,但是在我们的模拟后端,我们可以这样做:

我们回到我们部署的日期:

好了。这样我们就可以阅读合约公开的数据。现在我们想要和它互动。

在这种情况下,最简单的方法是,通过发送一个项目的名称和url来提议一个新项目,该项目至少具有最低的输入费用:

当然,我们需要再次开采:

但是我们得到以下输出:

太棒了——这意味着我们的项目被创建了。这样我们就可以部署、读和写合约。

但如果合约已经部署了,我们只是想和它互动呢?幸运的是,所生成的代码包括一个NewWinnerTakesAll方法,它仅使用部署的契约的地址,让我们实例化合约:

我们得到与我们部署的合约相同的返回值,并可以以与此版本相同的方式进行交互,这个版本是通过地址实例化实现的。

我们已经完成了所有的步骤,我们需要有意义地与一个合约进行交互,但只需要在模拟的后端。为了使用testnet或real Ethereum区块链,我们只需要适应以下几件事:

这将产生我们在上面创建的auth对象。当然,请不要在代码中使用明文或密码,而是以安全的方式加载它们。

如果已经部署了合约,我们不需要创建NewIPCClient,但是可以直接拨号到节点:

你可以在这里找到代码和完整的例子。

总结

正如我在这篇文章的开头所说的,在我看来,要依赖可靠的智能合同来处理应用程序奔溃还为时过早,但这和其他一些基于区块的智能合同的方法的潜力是巨大的,因此了解它周围的技术当然是值得的。

Go语言适合于与基于ethereumbased的智能合约交互的任务,因为有很多来自geth的可重用代码,甚至还有一些关于如何开始的文档。这当然可以用其他语言来实现。(使用web3),但如果你喜欢的话,这似乎是一个可靠的选择。
  • 大小: 3.4 KB
  • 大小: 1.6 KB
  • 大小: 15.1 KB
  • 大小: 23.9 KB
  • 大小: 3 KB
  • 大小: 5.2 KB
  • 大小: 1.8 KB
  • 大小: 7.7 KB
  • 大小: 5.7 KB
  • 大小: 3.6 KB
  • 大小: 6.2 KB
  • 大小: 7.4 KB
  • 大小: 3.6 KB
0
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 【1】使用Go语言与Ethereum智能合约进行交互

    译者注:本文主要介绍使用Go语言与Ethereum智能合约进行交互。以下为译文 尽管最近出现了麻烦,但Ethereum仍然是区块链空间中实现智能合约最重要的系统,而且这种情况似乎不太可能很快改变。 在我看来,技术本身...

  • 使用go与智能合约交互之使用abigen生成合约go文件进行调用

    本章我们就来学习一下如何使用abigen生成合约go文件并进行调用

  • 使用go与智能合约交互之abi调用

    让我们一起学习一下如何使用abi的方式进行智能合约的调用

  • 11Y 以太坊 ethereum truffle : 部署智能合约并与之交互

    区块链 blockchain 以太坊 ethereum truffle

  • 使用go与智能合约交互之函数选择器调用

    我们将要学习如何使用go在不知道合约源码的情况下进行合约方法调用……

  • Go语言与智能合约的交互

    Go语言与智能合约的交互 实现步骤 首先要编写一份智能合约 将智能合约通过工具转化为go文件 自己编写go文件调用智能合约转化成的go文件提供的接口 具体实现 编写一份智能合约 智能合约使用solidity语言写的,...

  • 使用Go与以太坊智能合约交互

    尽管最近遇到了些麻烦,但以太坊仍然是区块链领域内智能合约的最大参与者,这似乎不会很快改变。 在我看来,技术本身具有很大的潜力,是从学术的角度看很有意思,但正如上面提到的问题和之前的许多问题是区块链技术...

  • 使用Golang与以太坊进行智能合约开发

    在本文中,我们将介绍如何使用Golang编写和部署智能合约到...接下来,我们可以使用Golang与以太坊进行交互。在这个示例中,我们定义了一个名为Voting的智能合约。在这个示例中,我们定义了一个名为Voting的智能合约。

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

    尽管最近遇到了些麻烦,但以太坊仍然是区块链领域内智能合约的最大参与者,这似乎不会很快改变。 在我看来,技术本身具有很大的潜力,是从学术的角度看很有意思,但正如上面提到的问题和之前的许多问题是区块链技术...

  • 【智能合约】Go语言调用智能合约 | geth

    安装abigen工具:用来生成go文件,3. remix连接私有链4. 合约部署5. 初始化私有链节点创世块6. 合约部署7. 调用8. gcc编译器安装 1. 获取abi文件:合约的接口 Application Binary Interface 在remix工具中编译合约...

  • 【全网最细】win10环境下go和智能合约交互

    全网最细win10环境下go和智能合约交互

  • 用golang和以太坊智能合约交互

    用golang可以开发程序和以太坊智能合约进行交互,只是需要一些额外的步骤。 首先需要智能合约源码,其次需要abigen这个程序,这个程序可以通过编译go-ethereum程序得到。 在windows下通过把go-ethereum源码下载...

  • php truffle,利用truffle与智能合约进行交互

    contract.getAdopters() #查看宠物主人 参考博客: 以太坊系列之十六: 使用golang与智能合约进行交互 以太坊系列之十六: 使用golang与智能合约进行交互 以太坊系列之十六: 使用golang与智能合约进行交互 此例子的...

  • 在本地以太坊私链上,使用go调用智能合约,获取事件日志

    在本地搭建以太坊私链,使用go语言调用智能合约,并记录事件日志

  • 【智能合约】Go语言调用以太坊 | geth

    以太坊智能合约开发中最常用的命令行工具。 Geth是由以太坊基金会提供的官方客户端软件,用Go编程语言编写的。Geth提供了一个交互式命令控制台,通过命令控制台中包含了以太坊的各种功能(API)。全名go-ethereum。 ...

  • 如何在私有区块链上编写、部署以及与以太坊进行交互的智能合约

    Deploy, and Interact with Ethereum Smart Contracts on a Private Blockchain 作者:jack_schultz 翻译:无阻我飞扬摘要:本文作者以极长的篇幅给出了在私有区块链上编写、部署以及与以太坊进行交互的智能合约的...

  • 以太坊智能合约部署与交互

    启动容器来执行geth命令root@ubu-blockchain2:~# docker run -i blockchain101/ethereum-geth:1.6.5 geth attach http://45.32.252.88:8201 Welcome to the Geth JavaScript console! instance: Geth/01/v1.6.5-...

  • 区块链以太坊 - Go调用合约

    从之前的文章,我们一直都是使用Nodejs以及使用web3js或者ethers与合约进行交互,在这篇文章中,我们讲讲如何使用go语言来与合约进行交互。由于go没有web3js或者ethers这样的第三方工具库来调用,所以go与合约的交互...

  • 四旋翼无人机轨迹跟踪控制算法的仿真研究:PID控制、反步控制与滑膜控制的对比分析报告 说明文档附建模过程与仿真结果文献(英文版)PPT展示 同参考轨迹下的三种控制方法三维仿真对比实践,四旋翼无人机

    四旋翼无人机轨迹跟踪控制算法的仿真研究:PID控制、反步控制与滑膜控制的对比分析报告 说明文档附建模过程与仿真结果文献(英文版)PPT展示 同参考轨迹下的三种控制方法三维仿真对比实践,四旋翼无人机轨迹跟踪控制算法的仿真研究:PID控制、反步控制与滑膜控制的建模与仿真结果分析(英文版PPT),PID_反步控制_滑膜控制三种四旋翼无人机轨迹跟踪控制算法仿真 附带对应的说明文档,提供建模过程与仿真结果文献(英文)PPT 描述:采用的同一种参考轨迹,都是三维仿真 三种控制方法: [1]PID控制、[2]反步控制、[3]滑膜控制(三个仿真模型) 每个仿真均应用了同一种轨迹路径,直接运行即可出三维图,可以实现四旋翼无人机轨迹的跟踪 ,核心关键词:PID控制; 反步控制; 滑膜控制; 四旋翼无人机; 轨迹跟踪; 仿真模型; 三维仿真; 仿真结果。,四旋翼无人机轨迹跟踪控制算法仿真:PID、反步控制与滑膜控制的比较研究

Global site tag (gtag.js) - Google Analytics