Python通过JSON-RPC请求对智能合约进行部署交易

本文探讨了如何将JSON-RPC请求发送到Geth节点以创建原生的交易。目标是在使用高级库(如web3py或web3js)时了解并查看后台发生的情况。

另外,对处理错误和异常不是本文的重点。如果出现任何问题,它将只是显示失败。这篇文章主要是学习。对于生产环境,还是考虑使用web3.py。

我们将仅使用HTTP请求在私有链上使用智能合约部署和交互(调用函数和读取公共变量)。交易是离线签名的,然后才发送到geth节点进行处理。

对于本指南,我们使用的是私有的Proof-of-Authority网络。如果想创建这样一个网络,可以阅读我们以前的帖子。本文假设使用Ganache(以前称为TestRPC)或任何以太坊网络都完全没问题。因此,不会介绍有关在网络设置的任何内容,重点是使用python将HTTP请求发送到Geth节点。

条件

1.通过IPC或RPC访问以太坊网络(可能是公有,私有或像Ganache这样的模拟器)。

2.安装了python 3。 我个人喜欢Anaconda发行版。

3.安装最新版本的web3py。

1.向Geth发送一个简单的请求

让我们通过向Geth发送一个非常简单的请求来热个身。查询下网络ID。 第一步是阅读文档。 我们需要的方法称为,在此处进行描述。

我的Geth节点URL和端口是:。如果你使用的是具有默认值的,则URL可能是。

我正在使用Requests python library来发出我的HTTP请求。

结果是:

不错,从那里我们准备好与合约一起部署和交易,这建立了一个良好的基础。1515是我的私有区块链的网络ID,如创世文件中所定义。目前看起来都很棒。 使用Ganache,应该获得5777的网络ID。

但在能够签署和发送交易之前,我们需要一个地址,一个私钥和一些以太币。

2.创建公钥私钥对并获取一些以太币

web3py(release 4)库将帮助我们创建密钥对。

在这个示例中,我得到:

请永远不要分享你的私钥!我这样做是因为它是一个本地私有链,我每天都要销毁并重启几次。我没有在任何公共网络上使用这个密钥对。

现在为了获得这个地址,有多种方法:

1.一种非常简单的方法是在文件中添加此地址并启动新网络。下面是之前我的创世纪文件,其中包括我们刚刚创建的地址(删除)。

2.如果你有可以挖矿的节点或,请打开Geth Javascript控制台并手动创建交易:

这里我从发送1000以太币到我的地址,1个以太坊是10的18次方wei(1个后跟18个零)。值的单位是wei。

3.在公共测试链上,使用faucet。

3.使用智能合约部署和交易

太好了,既然我们有一个带有一些以太网的地址(为了支付gas费用),我们可以离线创建我们的交易,签名并将其发送到具有原生的HTTP请求节点。

我们将使用方法,该方法将交易的签名作为输入参数。

python代码正在查询在编译智能合约时创建的包含合约和字节码的json文件。在测试python代码之前,创建一个工作区并编译虚拟合约。

然后更新python代码,用节点的URL以及工作空间和文件的路径(不要忘记在路径中用你的userName替换我的userName)。

其他一切都在代码中,应该是不言自明的。

文末附完整代码。

我们让一切都变得简单易于修改和测试。 玩的开心

python用web3.py库开发以太坊来说非常的方便,有兴趣的用户可以关注我们的

python以太坊教程

,主要是针对python工程师使用web3.py进行区块链以太坊开发的详解。

raw_JSON_RPC_requests_to_smart_contract.py

文章来自官方博客:

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20190106G0EKV000?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券