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

a9ef90ff9f0830b85e0fee565416ba89.png

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

964210e40bdf0d1ba42a7289f17054d2.png

警告:下面的教程包含这些元素:显式加密、点对点金融服务以及可能的违规行为。这些例子仅仅是为了说明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:

dec49eb0a45015b54c43d2c6ab9b910f.png

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

d02adcbaa1af7d73596ec2fcd659b6ff.png

另外,如果您使用的是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端点,并且用于分析的仪表盘也很有帮助。

ce027e2827ab8ba1dda3002cfd5b6bd5.png

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

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

初始化

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

05d3120b4ea76c56c1d7f21ca21bd75f.png

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

a2366d7b5a06a1e91044f8fa8ddbded9.png

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

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

f026e1eb634d135d0acca003c1144afe.png

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

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

6883e4ffa34eb3f3a66902397db122c8.png

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

afb703d3b1ccc1ad6b9fe0e58e6a55b5.png

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

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

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

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

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

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

创建一个帐户

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

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

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

9aa607eeb3894056e8ab26b195c488bb.png

上面的命令使用输入的字符串生成了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,请复制整个代码块:

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

df92c93e3e94ad6cf871b3cd0cc66f22.png

我们需要使用json解析它:

77e2c6d68de1335be23cccad14a537bd.png

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

b7ef20184caa7d21425c174b174f8835.png

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

f4e574aae2325ceedafae0bac168a503.png

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

262befac2617595f94159c88ee0dd1f6.png

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

创建交易

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

6c6ce700687725c80271daab3f295b3d.png

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

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

af2974a3d91620f3215fb514bafeb1c8.png

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

e75d4060e51c698f6e6b0a3f17d19690.png

·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:

c2cd2cb3eaa6cf0b3d36b917810f0617.png

签名和发送交易

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

3268cbef659f03427fb97a388152a234.png

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

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

40ba4ff41cdacdc8dab91a4238a0e4b7.png

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

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

5d1da8fb50be936171e86783d1537ee8.png

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

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

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

304810e6a79d62b7cf5f72eedb26ce99.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/427108.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于域名的apache服务器

1承接上个博客说的&#xff0c;咱们继续扩展 Cd /usr/local/apache2/conf /usr/local/apache2/conf/extra扩展文件 Vi httpd-vhosts.conf <VirtualHost *:80> ServerAdmin 1327629137qq.com DocomentRoot “/data/webapps/www1” ServerName www.wugk1.com <Directory…

MySQL 数据库修改登录密码

MySQL 数据库修改登录密码、、 -------- mysql修改密码 默认的密码为空&#xff1a;mysql -u root -p第一次更改密码&#xff1a;mysqladmin -uroot -p password xhyEnter password: xhy 第二次更改密码&#xff1a; mysqladmin -uroot -pxhy password xhy1mysql -u root -p En…

python列表统计每个元素出现次数_python 统计list中各个元素出现的次数的几种方法...

利用字典dict来完成统计举例&#xff1a;a [1, 2, 3, 1, 1, 2]dict {}for key in a:dict[key] dict.get(key, 0) 1print dict输出结果&#xff1a;>>>{1: 3, 2: 2, 3: 1}利用Python的collection包下Counter的类举例&#xff1a;from collections import Countera …

raid5需要几块硬盘_Raid5磁盘阵列数据恢复思路分析--附真实案例

1.raid5磁盘阵列数据恢复思路分析Raid5磁盘阵列是一种相对安全的磁盘阵列形式&#xff0c;数据分布状态有点类似于raid0磁盘阵列。但是raid5阵列比raid0阵列更为安全的一点就是阵列的每一组平行数据块中都包含了一个校验块&#xff0c;校验块的作用主要表现在阵列有一块硬盘掉线…

Linux思维导图之sed、实战习题

命令解释&#xff1a; ◆sed 2p /etc/passwd第二行打印了两次其余一次 ◆sed-n 2p /etc/passwd 只打印出第二行 ◆sed-n 1,4p /etc/passwd 只打印出1到4行 ◆sed-n /root/p /etc/passwd只打印出root的行 ◆ sed-n 2./root/p /etc/passwd打印从2行开始往下到root行 ◆sed-n /^$/…

jenkins安装(1)

1先在互联网上输入jenkins.io 2下载jenkins.war 3上传到服务器上 安装jdk前面的博客已经说过了 4 Jenkins requires Java versions [8, 11] but you are running with Java 1.7 from /usr/java/jdk1.7.0_06/jre java.lang.UnsupportedClassVersionError: 51.0 at Main.verifyJa…

jenkins安装(用户配置)(2)

1安装rebulider&#xff08;再次构建可以少写很多参数&#xff09;插件 2安装safe restart安全重启 3系统管理—Configure Global Security—安全矩阵 添加admin用户给与全部权限 4系统管理—管理用户—添加用户 给与用户所有权限&#xff0c;取消第一个勾选&#xff0c;不给予…

发生系统错误53_SAP那些事-推理剧-36-奇怪的付款清账(F-53)报错“TABLE_INVALID_INDEX”...

问题描述&#xff1a;在使用F-53进行供应商付款清账操作时&#xff0c;模拟凭证&#xff08;包括保存凭证&#xff09;时出现如下的ABAP Down错误&#xff1a;问题分析&#xff1a;从报错内容看&#xff0c;我们首先看到报错的程序为SAPMF05A&#xff0c;这个程序财务顾问都熟悉…

微信公众平台-杂项:小程序导航

ylbtech-微信公众平台-杂项&#xff1a;小程序导航1.返回顶部 1、小程序导航 微导航 http://www.we123.com/xcx/ 91udhttp://www.91ud.com/app/ 微信主页 http://www.weixinzhuye.com/app.html 2、2.返回顶部3.返回顶部4.返回顶部5.返回顶部 6.返回顶部1、公众号导航 微小宝 ht…

jenkins安装环境搭建(3)

1安装环境搭建 yum -y install java安装java环境 2安装git用于存储和管理源代码 yum -y install git 3安装并配置git git config --global user.name “yao666” git config --global user.email 1327629137qq.com ssh-keygen -t rsa -C 1327629137qq.com cd ~/.ssh 证书正确 …

seo伪原创工具_文章伪原创工具哪个好用(伪原创工具有哪些)

从事网站seo优化的工作基本上每天都会和文章打交道&#xff0c;因为网站的排名与网站的收录关系是非常大的&#xff0c;网站的收录又和文章息息相关&#xff0c;搜索引擎的胃口是比较喜欢新的内容、原创的内容&#xff0c;而对于一些文案功底比较没那么好的SEOer来说&#xff0…

Android系统的智能指针(轻量级指针、强指针和弱指针)的实现原理分析【转】...

Android系统的运行时库层代码是用C来编写的&#xff0c;用C 来写代码最容易出错的地方就是指针了&#xff0c;一旦使用不当&#xff0c;轻则造成内存泄漏&#xff0c;重则造成系统崩溃。不过系统为我们提供了智能指针&#xff0c;避免出现上述问题&#xff0c;本文将系统地分析…

函数调用关系图如何画_彩铅画入门植物教程 | 如何用彩铅画一株多肉?多肉彩铅画教程步骤图详细...

画画不难&#xff0c;难的是不拿起手中的笔去画。彩铅画入门植物教程 | 如何用彩铅画一株多肉&#xff1f;多肉彩铅画教程步骤图详细多肉的质感如何表达呢&#xff1f;还是那句话&#xff1a;艺术来源于生活&#xff0c;要仔细观察。拿我们今天画的多肉来说&#xff0c;首先要观…

jenkins安装 新建节点(5)

1部署程序&#xff0c;tomcat部署不多说 2新建节点 系统管理—管理节点—新建节点 3完成 4这一点要注意 进行验证任务 创建任务—构建一个自由风格的软件—确定 限制项目的运行节点 选择testenv 构建 执行脚本 输入ifconfig验证 构建成功

工厂方法模式_1天1个设计模式——工厂方法模式

意图工厂方法模式是一种创建型设计模式&#xff0c; 其在父类中提供一个创建对象的方法&#xff0c; 允许子类决定实例化对象的类型。问题假设你正在开发一款物流管理应用。1.0版本只能支持处理卡车运输&#xff0c;因此大部分的代码都位于名为Truck的类中。随着业务越来越广泛…

hadoop简介(大数据技术)

Hadoop可运行于一般的商用服务器上&#xff0c;具有高容错、高可靠性、高扩展性等特点 特别适合写一次&#xff0c;读多次的场景 适合 大规模数据 流式数据&#xff08;写一次&#xff0c;读多次&#xff09; 商用硬件&#xff08;一般硬件&#xff09; 不适合 低延时的数据访问…

hive简介(大数据技术)

背景和概念 Hive是一个依赖于分布式存储的查询和管理大型数据集的数据仓库。传统的非大数据行业一般都是基于表进行数据存储和管理的&#xff0c;如果由于业务扩张或者其他原因迁移到HDFS平台上&#xff0c;那么需要将传统的SQL查询语句全部翻译成Map-reduce的程序实现&#xf…

kafka简介(大数据技术)

kafka是用于构建实时数据管道和流应用程序。具有横向扩展&#xff0c;容错&#xff0c;wicked fast&#xff08;变态快&#xff09;等优点&#xff0c;并已在成千上万家公司运行。 简单说明什么是kafka Apache kafka是消息中间件的一种&#xff0c;我发现很多人不知道消息中间件…

matlab晶闸管整流电路,采用Matlab/Simulink对三相桥式全控整流电路的仿真分析

本文利用Simulink对三相桥式全控整流电路进行建模&#xff0c;对不同控制角、桥故障情况下进行了仿真分析&#xff0c;既进一步加深了三相桥式全控整流电路的理论&#xff0c;同时也为现代电力电子实验教学奠定良好的实验基础。1 电路的构成及工作特点三相桥式全控整流电路原理…

flume简介(大数据技术)

1 .背景 flume是由cloudera软件公司产出的可分布式日志收集系统&#xff0c;后与2009年被捐赠了apache软件基金会&#xff0c;为hadoop相关组件之一。尤其近几年随着flume的不断被完善以及升级版本的逐一推出&#xff0c;特别是flume-ng;同时flume内部的各种组件不断丰富&#…