使用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),但如果你喜欢的话,这似乎是一个可靠的选择。

时间: 2024-11-16 00:16:34

使用Go语言与Ethereum智能合约进行交互的相关文章

solidity编程开发语言——以太坊智能合约利器

这篇关于Solidity教程的博客展示了很多Solidity特性.本教程假定你对以太坊虚拟机和编程有一定的了解. 以太坊,"世界计算机"提供了一个非常强大的全球共享基础设施,使用名为Solidity的编程语言构建去中心化应用程序. 让我们开始我们的Solidity教程,介绍Solidity. 什么是Solidity? 以太坊Solidity是一种面向智能合约的高级语言,其语法与JavaScript类似.solidity是用于生成在EVM上执行的机器级代码的工具.solidity编译器获

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

系统 ubuntu 17.10 , 心好痛,又买了一个 强烈建议使用xshell进行前期的测试工作,很容易管理几个终端,如下图,连开5个终端,4个进行实验,1个查看相关文件参数,比原来在虚拟机方便好多 先了解相关指令,再观看比较合适:http://truffle.tryblockchain.org/ 安装: 先完成上一条博客的安装,再来进行下面的操作:http://www.cnblogs.com/tianlongtc/p/8877579.html #第一个终端 sudo apt install

2018年以太坊智能合约开发语言Solidity最佳IDEs

Solidity是一种以智能合约为导向的编程语言.这是一种只有四年的年轻语言,旨在帮助开发基于以太坊数字货币的智能合约. 理解它官方文档应该是学习Solidity的最佳来源:solidity.readthedocs.io 想在以太坊的网络上建立自己的加密货币吗?想拥有自己的初始代码产品吗?以下是您今天可以使用的最佳Solidity IDE. Remix IDE Remix IDE是基于浏览器的,并且集成了编译器.没有服务器端组件. 官网: https://remix.ethereum.orggi

第一行代码:以太坊(2)-使用Solidity语言开发和测试智能合约

智能合约是以太坊的核心之一,用户可以利用智能合约实现更灵活的代币以及其他DApp.不过在深入讲解如何开发智能合约之前,需要先介绍一下以太坊中用于开发智能合约的Solidity语言,以及相关的开发和测试环境. 智能合约就是运行在以太坊上的程序.客户端可以通过Web3.js API调用智能合约,而智能合约本身又可以直接访问以太坊网络,也就是说,智能合约前面连接着客户端,后面连接着以太坊网络,起到了承前启后的作用,而且通过智能合约,可以让整个以太坊网络更灵活,可控性更强.其实智能合约的作用相当于微软O

如何用python和flask以太坊智能合约开发

将数据存储在数据库中是任何软件应用程序不可或缺的一部分.无论如何控制该数据库都有一个该数据的主控.区块链技术将数据存储到区块链网络内的区块中.因此,只要某个节点与网络同步,它们就会获得区块中数据的副本.因此,该技术中没有特定的数据主控. 在本教程中,我们将编写一份智能合约(我将进一步解释),以便在区块链上保留用户数据.我们将使用python web3(web3的python库)来开发和部署智能合约.一旦我们在区块链上部署了智能合约.我们将使用flask API与智能合约进行交互以存储一些数据/信

以太坊智能合约入门项目-众筹项目

一.智能合约 智能合约(英语:Smart Contract)是一种旨在以信息化方式传播.验证或执行合同的计算机协议.智能合约允许在没有第三方的情况下进行可信交易.这些交易可追踪且不可逆转.智能合约概念于1994年由Nick Szabo首次提出. 以上解释来自于维基百科 由于缺少可信的执行环境,智能合约并没有被应用到实际产业中,自比特币诞生后,人们认识到比特币的底层技术区块链天生可以为智能合约提供可信的执行环境,以太坊首先看到了区块链和智能合约的契合,发布了白皮书<以太坊:下一代智能合约和去中心化

python如何使用web3py与以太坊投资智能合约交互

在以太坊和其他区块链中,仍有很多被证明的概念正在实施,开发人员在尝试如何应对这些新概念.作为dInvest 系列文章一部分,我也在研究以太坊并尝试在区块链中实施对冲基金.在上一篇文章中,我讨论了如何在python中启动和运行定量框架.在这篇文章中,我将介绍如何将python程序与以太坊智能合约集成.出于这样或那样的原因,可能也面临着这个问题,尽管以太坊提供了图灵完备语言,但并不是所有事情都能完成. 假设你已经在以太坊创建了一个简单的教程合约,现在想要看一些更高级的东西.我个人喜欢ManuelAr

【刘文彬】【精解】开发一个智能合约

原文链接:醒者呆的博客园,https://www.cnblogs.com/Evsward/p/contract.html 智能合约 这两天被老大搞去搬砖,学习计划有变但无大碍,这篇文章将仔细分析智能合约相关内容. 关键字:智能合约,remix,Solidity,truffle,geth,leveldb,datadir,ganache,web3j 合约 合约也称合同.协议,是甲乙双方参与的,制定一系列条目规范双方权利与义务的文件.智能合约是电子化的,自动执行的,去中心化的,具有不可抵赖性,本质上它

以太坊智能合约开发工具 Truffle 最佳入门指导1

Truffle是以太坊(Ethereum)智能合约开发的瑞士军刀,小巧好用,上手简单. 本篇文章主要展示如何用Truffle 开发第一个Ethereum智能合约. 1.准备工作:(本人针对window环境,如果是mac 或linux可以自行搜索其他教程) a.安装git bash :http://gitforwindows.org/ b.安装npm:https://jingyan.baidu.com/article/a17d528506d7f58098c8f2b0.html 2.安装Truffl