Net程序员如何使用Nethereum开发以太坊区块链

最近,我有时间在以太坊区块链上玩智能合约。此示例将重点关注使用Nethereum库与智能合约进行交互。

最初我想看看Eth Gas Station上发现的合约0x2a0c0dbecc7e4d658f48e01e3fa353f44050c208中发生的事件,但是在轻模式下获得geth同步被证明是一个非常大的挑战。在快速模式下同步也很慢:几个小时取决于你的连接速度。由于我希望我的示例尽可能无缝地工作,因此在测试区块链上部署起来更容易:ganache-cli。

因此,示例的第一部分是使用ganache-cli本地区块链,并从Nethereum文档部署示例合约。

ganache-cli

Ganache-cli将在每次运行时生成测试帐户。为了确保它们不会更改(更容易进行测试,但从不在生产中使用这些帐户!),使用助记符参数。不要忘记映射用于连接节点的端口8545。

这个命令的结果是:

现在我们已准备好本地测试区块链并等待合约。

Nethereum客户端

与以太坊区块链交互涉及几个步骤。

创建合约代码

编译二进制文件

解锁帐户以发送要处理的交易

部署二进制文件

与合约互动

合约代码

我们将使用Nethereum文档中的示例:

代码编译将成为下一篇文章的一部分。目前我只需复制并粘贴应用程序二进制接口(ABI)和字节码:)

解锁帐户

如果你要发送需要支付费用的交易,则需要解锁该帐户。这笔费用是以gas支付的,gas价格各不相同。

在此示例中,帐户已解锁30分钟,但在现实生活中,这应该更少:)

gas估算和部署

Nethereum提供了一种方便的功能来估算函数和合约部署的gas成本。否则你需要提供任意金额(希望足够高)。

发送交易后,我们将等待它被挖掘:然后我们可以获得包含交易信息的收据:

区块号

合约地址

用过的gas

调用函数

函数调用遵循相同的模式:估计gas,发送交易并等待接收。

监听事件

在监听事件之前,我们需要为它创建一个过滤器。之后,将检索在创建过滤器之后(或在最后一次调用GetFilterChanges之后)发生的事件。

运行客户端和节点

运行将启动两个容器,并在客户端完成后停止。

没有收到任何事件…看起来像正在实施的功能。虽然我不想等待它,但我决定看一下运行私有Geth节点。

私有geth节点

根据client-go Docker中心映像上的说明,设置更复杂一些:

第1步:创建genesis文件

虽然默认提供100eth,但是在私有Geth节点中为帐户提供资金是通过在文件中添加它们来完成的。为简单起见,我们将重用ganache帐户。

第2步:初始化geth节点

然后需要使用命令初始化节点。如果你的网络中还有其他节点,则还需要初始化它们。

第3步:导入帐户

我们需要使用命令导入帐户,帐户私钥和密码。

第4步:使用挖掘运行geth

该节点以和启动,以确保没有人可以连接到它,并且它不会分别尝试发现。

现在我们可以构建并启动docker镜像:

看起来需要花一些时间…

准备以太坊DAG(定向非循环图)需要花费大量时间。当然,不是我的样本开始时我愿意等待的。希望有另一种共识算法可用!

用geth进行权限挖掘的证明

这种设置更复杂,但是由于这篇很棒的文章,它也被记录下来了。

第1步:更新genesis文件

最简单的是使用创建genesis.json文件。我们将使用PoA和两个帐户。其中一个将是用于验证块的1个帐户。

client-go Docker hub image不包含puppeth。希望提供包含所有工具的dockerfile,我们可以从中构建一镜像。镜像在这里:geth-alltools docker image。

不带参数运行会打开一个shell,我们就可以开始玩弄了。

创建的genesis文件将位于文件夹中。你可以注意到帐户是在extradata字段中设置的。

第2步:导入帐户

要重新使用帐户,我们需要使用命令导入帐户,并使用帐户私钥和密码。

第3步:使用挖掘运行geth

在运行geth时必须解锁用于块的帐户,因此我们将其添加到geth参数中。

封装

再次运行客户端和节点:

最后!我们现在有一个非常简单的项目,它可以部署合约,与之交互,并监听事件!

本文的源代码库位于Github上。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181219G1IACR00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券