Python开发人员对于以太坊和区块链库的技术练习。

警告:下面的教程包含这些元素:显式加密、点对点金融服务以及可能的违规行为。这些例子仅仅是为了说明Python区块链的强大功能和便捷性。

嗨,Pythoners,你们好!

我真的很喜欢Python社区。像很多人一样,Python是我的第一种编程语言。Python hackathon和它的meet-up非常棒。而且此外,我喜欢Monty Python(https://pythonspamclub.com/monty-python-and-programming-language/)!

我正在将热爱的东西与目前的工作结合在一起:向开发人员展示区块链编程的强大功能,以及这些技能是多么容易掌握。

这是一个向Python开发人员介绍Web3.py(一个区块链/以太坊库)的基础知识的教程。我们将在Python解释器中做很多事情。(在下一节中,我们将给出一个合适的目录。但现在,让我们放轻松!)

注意:出于安全原因,我们将通过测试网络进行汇款。所有这些技术都可以在主要的以太坊网络上使用。

目录

·安装

·建立连接

·初始化

·创建一个帐户

·ENS帐户

·汇款

安装

我们将使用pip,用命令行安装web3.py:

对于同时安装了Python 2和3的用户,您应该检查一下使用哪个版本的pip命令。某些默认的是2.7:

另外,如果您使用的是virtualenv,这里还有一些为Web3.py设置环境的文档(https://web3py.readthedocs.io/en/stable/troubleshooting.html#setup-environment)。

很好!我们已经开始了。

建立我们的连接

区块链系统是分散的网络,由运营专门的P2P软件或“节点”的人员组成。它类似于torrent网络:为了与网络交互,您必须托管一个节点,或使用相关的托管服务。

由于这是基础教程,因此我们将使用托管服务。最受欢迎的是Infura。您可以设置自己的免费帐户(说明见https://blog.infura.io/getting-started-with-infura-28e41844cc89/),也可以使用下面的产品ID。获取项目ID和API端点至关重要——这将是我们通往区块链的API端点,并且用于分析的仪表盘也很有帮助。

复制这里的Endpoint,并确保在地址前添加https://。

一旦有了它,您就可以用Python连接区块链了!

初始化

让我们启动Python解释器。具体操作取决于您安装的Python,输入你通常运行Python脚本时在脚本名称前面的部分就可以了。对于我的Mac iTerm来说,它同时安装了Python 2和3,是下面这样的:

为了检查我们的所有设置是否正确,请运行python解释器和以下命令:

上面的命令导入了一些web3.py中的主要方法,我们要用这些方法连接区块链,它还导入了内置的json。

接下来,我们将创建一个对象(w3),我们将使用Infura API端点(以https://开头)对其进行初始化。在本教程接下来的部分中,它将成为web3.py与区块链协作的主要方式。

注意:您需要在Infura API地址前面添加HTTPS://,否则会出现错误!

我们还需要添加一些中间件来帮助我们使用Infura和Rinkeby测试网:

现在,为了查看一切是否顺利,我们运行:

如果您得到True的结果,恭喜!您已连接到区块链!

如果您得 False的结果,可以检查以下事项:

1.如果您需要重新启动解释器,那么必须重新导入库,并且重新初始化变量

2.您是否正确复制了Infura API密钥?

3.您是否安装了web3.py?是否安装并导入了Web3和HTTPProvider?

4.您是否已在API密钥前面加上https://?

创建一个帐户

如果我们想在区块链上汇款,我们需要一个以太坊账户。以太坊账户是以太坊区块链上的主要身份单位——账户的地址用于网络对用户的识别。帐户系统的基础是基于公钥加密的分散身份协议。本质上来说,区块链网络上的身份是通过公共地址对应方(由网络持有)对单个私钥(由用户秘密持有)的数字签名进行身份验证来确认的。尽管它带来了一定的用户体验障碍,但它确实提供了一种快速的、点对点的身份验证协议。

用web3.py生成一个可以在以太坊网络上使用的账户非常容易。

注意:在接下来的几个步骤中,我将违反一些加密和安全方面的规则。(1)我将生成一个熵不足的私钥(随机地),并且(2)我将在线公开私钥。在本教程之外,我不会使用此私钥——它只是出于教学的目的。您应该始终使用正确的私钥管理,例如Geth或MetaMask,并且永远不要共享您的私钥。

上面的命令使用输入的字符串生成了my_account对象,该对象包含一个私钥(my_account._private_key)和相关的以太坊地址(my_account._address)。但是,由于我已经公开该私钥,因此其他人可以生成和使用相同的私钥。(幸运的是,本教程仅在用于测试的区块链网络上使用它。)

因此,用户通常将私钥的创建和管理委托给名为客户端(如Geth)或钱包(如MetaMask)的软件。这些软件提供了一种非常安全的方式来生成和处理用于区块链交互的私钥。

ENS帐户

以太坊的地址是十六进制数字。这让人几乎不可能手动输入或记住,因此以太坊社区创建了Ethereum Name System (ENS)。它也具有域名系统的优势,该域名系统将网站服务器编号(216.58.194.46)替换为易于理解的名称(google.com)。大多数ENS名称都使用.eth域,而不是.com域。

例如,我有一个Ethererum帐户(0x4d3dd8471a289E820Aa9E2Dc5f437C1b2E22F598)。但是我用ENS将更易读的名称(coogan.eth)映射到该地址。如果您在支持ENS的应用或项目中输入这些内容(例如web3.py),它将代替以太坊的十六进制地址。不幸的是,由于.eth域名只能在主网上使用,因此我们无法在本教程中使用它,但也许下一教程中会有!

汇款

在最后一部分中,我们将从刚创建的账户向一些以太坊账户汇款。它们全部用python解释器进行!

人们对汇款的合理反应是:“难道互联网上的钱不是在波动中呈现不断下降的趋势吗?” 是的,加密货币的美元价格波动很大。这引起了企业的犹豫——为什么您会接受价格不确定的货币?

但是,以太坊生态系统建立了一个奇特的解决方法。以太坊被称为“世界计算机”,因为它是一个分布式系统,允许开发人员上传并执行自己的代码。用这种方式上传到以太坊的代码称为智能合约。它被上传到网络后,将成为一个独立的实体,具有自己的地址,内存和网络访问权限。智能合约使得以太坊开发者社区丰富了起来,该社区既富有创意又不懈地应对挑战,例如区块链固有的价格波动。

为了给以太坊创造稳定的价值来源,一群开发人员编写了名为Dai的代码并将其上传到以太坊。这是一个数字令牌,价值始终约为1美元(实现这种稳定性技术的操作细节很有趣,但是超出了本教程的范围——如果您想了解更多有关它原理的知识,可以在https://docs.ethhub.io/built-on-ethereum/open-finance/stablecoins/dai/找到更多信息)。持有Dai代币后,我们可以与其他用户以美元汇率兑换它。我们现在就这样做!

注意:要使帐户(不同于本教程中的账户)获得Dai,您可以通过这个合约地址(https://rinkeby.etherscan.io/address/0xc3dbf84abb494ce5199d5d4d815b10ec29529ff8#code),Metamask和您自己的帐户在测试网上创建自己的帐户。请按照此处教程(https://tokenmint.io/blog/how-to-mint-new-tokens-using-etherscan.html)中的步骤进行操作。

合约实例化

首先,为了与开发人员上传到以太坊的代码进行交互,我们需要知道上传的代码提供了哪些方法。Web3.py知道如何与核心的以太坊软件进行对接,但是需要被指导如何与第三方代码交互。我们通过为Web3.py提供应用程序二进制接口(ABI)来提供这个指导。与应用程序编程接口(API)相似,ABI让我们的计算机知道哪些功能可用以及实现这些功能需要的参数。ABI在区块链上不可用,由开发人员在Github或Etherscan网站上提供。

下面是我们将使用的测试网的Dai ABI,请复制整个代码块:

注意:此代码真的很长,请仔细地将其完全复制!

我们需要使用json解析它:

我们还需要告诉web3.py如何在太坊网络找到此代码。我们使用以下代码进行操作:

然后,我们使用ABI和这个地址将智能合约对象实例化。这将使我们能够访问代码提供的功能:

为了测试我们是否已经正确地将合约实例化,我们将调用一个函数,该函数告诉我们该合约持有多少Dai:

(运行该帐户时,余额可能有所不同)

创建交易

为了从我们的西班牙帐户(my_account)转移Dai ,我们将使用Dai智能合约中的transfer功能,如下所示:

我们可以看到,我们需要将两个参数传递给合约:to,这是一个十六进制的以太坊address和  value,为uint256格式。即使是经验丰富的开发人员,处理256位(uint256)的无符整型数也可能是一个挑战。这证明了非常规编程必须在智能合约的水平上完成,这经常让我很失望。Web3.py有一种方法可以将整数值转换为智能合约所需的格式,这个方法是toHex。让我们发送10个Dai,由于我们要发送的数量少于16个,因此我们只需将0x放在前面。对于address,请输入您要发送Dai给别人的地址。

我们的当前交易如下所示:

这些参数对于Dai合约很有用(我们不会在这出现错误),但是我们需要更多的参数,使得交易在以太坊网络上进行。这些参数是chainId,gas和nonce。

·ChainId可以让web3.py知道将交易发送到哪个网络。不同的网络有不同的偏好(就像我们一开始为Rinkeby安装middleware时所看到的那样),这有助于web3.py正确绑定交易。Rinkeby的网络ID为  4,这是网络ID的完整列表(https://besu.hyperledger.org/en/stable/Concepts/NetworkID-And-ChainID/)。。

·Gas是您向网络矿工支付的用于交易费用的小笔款项。许多人对此感到惊讶,但是它的金额很小(例如,我们的交易将花费0.00007000ETH,名为Gwei的特定面额划定了它的标准(https://ethereum-homestead.readthedocs.io/en/latest/ether.html))。Gas以分散的方式帮助网络安全运行。

·Nonce是每个以太坊账户专用的全局变量。它的作用与支票底部的数字相同:它允许对来自不同帐户的付款正确排序。发送每笔交易后,它就加一。Web3.py有一种查找当前nonce地址的方法:  w3.eth.getTransactionCount(ETHEREUM_ADDRESS)。

我们将使用web3.py的buildTransaction方法将这三个变量合并到我们的交易中。我还要添加我朋友的以太坊地址,并给他发送10个Dai:

签名和发送交易

现在我们有了transaction,我们需要使用私钥对其进行签名。这样,以太坊的点对点协议就会知道是哪个账户想要汇款。为了完成签名,我们将transaction对象和my_account._private_key对象放入以下函数中:

注意:您绝对不能在网上发布真实的私钥!我们这样做仅出于教学目的。再次注意:在此帐户耗尽测试的内容(或用于测试的Dai)之前,以上命令对Rinkeby网络都是有效的。

交易签名后,我们现在要做的就是通过Infura API端点将其发送到网络。我们使用以下命令对w3对象进行操作:

如果成功的话,恭喜!您刚刚用Python汇款了!

要查找您的交易,您可以输入txn_hash,并将字符串值交给Rinkeby的Etherscan。这是我拥有的哈希(您自己的可能有所不同):

您可以在以太坊测试网上看到它(https://rinkeby.etherscan.io/tx/0xc5f98cbe6f1eaef16916b148e6c4ae926b11ab9dde750e188362745da39d560e)。

如您所见,使用web3.py可以为您的应用程序创造各种可能。在下一个教程中,我希望使用正确的文件和目录来做更多的事情。现在,我只想向您展示区块链可以提供的一些令人难以置信的功能。希望您发现有趣的东西!这个社区希望与新朋友互动,请和他们交流。

英文原文:https://consensys.net/blog/blockchain-development/how-to-send-money-using-python-a-web3-py-tutorial/ 译者:桃夭

python如何运行py程序_如何用Python汇款:Web3.py教程相关推荐

  1. python怎么开发安卓程序_怎样用python开发安卓app-到底如何使用Python开发Android程序.txt...

    Python是一种动态语言,是比较简单的. Android不直接支持使用Python开发的应用程序,它需要使用它的中间件或数据库.它提供了在Android平台上的Python语言的支持; Python ...

  2. python 打卡程序_如何用python实现腾讯文档自动打卡并定时执行

    最近学了些Web,了解了一些selenum包内函数使用,就写了下自动健康打卡,并用windows任务计划程序定时执行,健康打卡这个针对特定网站,所以对于通用化使用倒没有太大用处,但关于腾讯文档如何填写 ...

  3. python中turtle画笑脸_如何用python画笑脸

    如何用python画笑脸?首先我们要先下载安装好python程序,然后再下载安装turtle包.把一切准备工作做完才能开始我们接下来的绘画工作. 1.在我们自己的电脑上找到python 的IDLE工具 ...

  4. python错了怎么修改密码_如何用python更改windows开机密码?

    虽然2018年的愚人节已经过去了,但是我们的乐趣每天都不能少,尤其是高级的.这不刚get到还可以用python来更改小伙伴的windows开机密码,赶紧去试了一遍,就来分享给大家,接着吧: 今天教大家 ...

  5. python简单可视化聊天界面_如何用Python制作可视化输入界面

    继续研究Python的应用,我们在有些程序中需要输入一些参数,可由几种方式实现 1.直接写在程序里,适合编程使用 2.使用input()函数,运行程序时输入 3.做成可视化界面,然后让程序获得 今天主 ...

  6. 用python做舆情分析系统_如何用Python做舆情时间序列可视化?

    如何批量处理评论信息情感分析,并且在时间轴上可视化呈现?舆情分析并不难,让我们用Python来实现它吧. 痛点 你是一家连锁火锅店的区域经理,很注重顾客对餐厅的评价.从前,你苦恼的是顾客不爱写评价.最 ...

  7. python调用有道翻译_如何用python“优雅的”调用有道翻译?

    前言 其实在以前就盯上有道翻译了的,但是由于时间问题一直没有研究(我的骚操作还在后面,记得关注),本文主要讲解如何用python调用有道翻译,讲解这个爬虫与有道翻译的js"斗争"的 ...

  8. python在线翻译小程序_几个Python小程序

    一.一个简单的下载程序 用过Curl后觉得它的下载功能很帅,命令行下的,就想用Python也来写一个命令行下的下载程序. 其实用Python实现下载文件的功能很简单,用urllib模块中的urlret ...

  9. 苹果笔记本python开发第一个程序_第一个Python程序【文章来自老男孩】

    首先我们打开python 交互式解释器, 执行如下命令: Python 3.5.1+ (default, Mar 30 2016, 22:46:26) [GCC 5.3.1 20160330] on ...

最新文章

  1. 使用ViewBag传送数据从控制器至视图
  2. centos 7安装 navicat
  3. 100路监控摄像头需要使用核心交换机吗?
  4. windows 加域
  5. 提取地图中道路_非机器学习方法·从遥感影像中提取道路
  6. 4轮拿下字节Offer,面试题复盘(含答案)
  7. 先出报表还是先计提所得税_合并报表投资时点的评估增值和内部交易到底该如何理解????...
  8. 安岳天气预报软件测试,安岳天气预报15天
  9. pdf python 3.7编程快速入门 潘中强_无python基础,这些书籍可以帮您快速入门。
  10. Python学习之路28-符合Python风格的对象
  11. Atitit 加强学生就业的规划与艾提拉的治学理念 目录 1. 思路的转换 1 1.1. 发展内需为主模型 vs 外贸模式 1 1.2. 批发模式vs 零售模式vs 1 1.3. 天堂模式vs地狱模
  12. 大华GigE工业相机VS2022+GigeVison SDK配置
  13. 一种表格数据比对的方法
  14. 关于二维数组传参问题
  15. 计算正五边形的面积和周长
  16. 基于matlab使用合成雷达和无线通信信号训练的语义分割神经网络执行频谱检测
  17. html如何使表单在页面居中显示,html怎样将表单居中
  18. Andriod Scroller使用小结
  19. 1. 激活函数(Activation functions)
  20. 生甜菜根糖的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告

热门文章

  1. js获取checkbox值的方法
  2. css之文本溢出处理 | 背景图片处理
  3. 口述完SpringMVC执行流程,面试官就让同事回家等消息了
  4. 1、jeecg 笔记开篇
  5. Android 生成随机数,获取一条随机字符串
  6. centos7 python3.6编译安装
  7. vue 怎么清空依赖_vuejs如何在把对象所有属性清空?
  8. 80--查询分组关联属性
  9. java web开发之 spring单元测试
  10. Storage 使用