Python 使用 Web3.py 进行 ETH 和代币转账
1、安装 Web3.py
pip install web3.py
2、注册 Infura 获得节点服务
使用邮箱注册 Infura 账户后,创建一个项目,即可获得以太坊节点服务,进入设置即可看到链接的URL
可以选择主网测试网等,会有两个链接,一个是使用HTTPS的一个是使用WebSocket,按你的需求选择一个就行了,注意:Infura 个人免费请求次数,是每天有十万个请求。
3、代码示例
from web3 import Web3
import json
import time
import os
import logging
from django.conf import settings
from decimal import Decimalclass PayEthOrToken(object):def __init__(self):# 设置web3self.web3 = Web3(Web3.HTTPProvider('your infura http url'))# token合约地址self.contract_address = 'your contract address'# 主钱包地址self.wallet = 'your wallet address'# 钱包的私钥self.wallet_key = 'your wallet key'# 合约的abi test.json 是eth的abi json文件,可以在eth区块链浏览器上获得with open('test.json', 'r') as f:self.abi = json.loads(f.read())# 生成合约self.contract = self.web3.eth.contract(address=self.contract_address, abi=self.abi)# 代币简写self.token_name = 'USDT'def transfer_usdt(self, to, value):'''进行代币转账args:to str:接收代币的地址value str/int:代币数量,以ether为单位,可以是字符串和int类型returns:(str, str):返回交易哈希,以及异常信息'''try:token_balance = self.web3.fromWei(self.contract.functions.balanceOf(self.wallet).call(), 'ether')# 如果代币不足返回异常if Decimal(token_balance) < Decimal(value):return None, 'Platform USDT token is insufficient, please try again later'# 进行转账代币nonce = self.web3.eth.get_transaction_count(self.wallet)tx = {'from': self.wallet,'nonce': nonce,'gas': 100000,'gasPrice': self.web3.toWei('50', 'gwei'),'chainId': 1}to = Web3.toChecksumAddress(to)txn = self.contract.functions.transfer(to, self.web3.toWei(value, 'ether')).buildTransaction(tx)signed_txn = self.web3.eth.account.sign_transaction(txn, private_key=self.wallet_key)tx_hash = self.web3.eth.send_raw_transaction(signed_txn.rawTransaction)return self.web3.toHex(tx_hash), 'pay success'except Exception as e:logging.error(f'转账{self.token_name}代币时发生异常:{e}')logging.exception(e)return None, str(e)def transfer_eth(self, to, value):'''进行eth转账args:to str:接收以太坊的地址value str/int:数量,以ether为单位,可以是字符串和int类型returns:str:返回交易哈希'''try:token_balance = self.web3.fromWei(self.web3.eth.get_balance(self.wallet), 'ether')# 如果代币不足返回异常if Decimal(token_balance) < Decimal(value):return None, 'Platform ETH token is insufficient, please try again later'# 获取 nonce,这个是交易计数to = Web3.toChecksumAddress(to)nonce = self.web3.eth.get_transaction_count(self.wallet)tx = {'nonce': nonce,'to': to,'gas': 100000,'gasPrice': self.web3.toWei('50', 'gwei'),'value': self.web3.toWei(value, 'ether'),'chainId': 1}# 签名交易signed_tx = self.web3.eth.account.sign_transaction(tx, self.wallet_key)tx_hash = self.web3.eth.send_raw_transaction(signed_tx.rawTransaction)return self.web3.toHex(tx_hash), 'pay success'except Exception as e:logging.error(f'转账eth时发生异常:{e}')logging.exception(e)return None, str(e)
Python 使用 Web3.py 进行 ETH 和代币转账相关推荐
- 前端Vue项目调用页面web3.js:连接metaMask钱包,(查询钱包ETH余额,查询代币余额,ETH转账,代币转账,代币授权,查询授权数量,计算价格)等功能
这里分享下相关文档 1.web3.js中文文档 https://learnblockchain.cn/docs/web3.js/getting-started.html 2.metamask官方文档: ...
- android web3j 代币查询_ERC20代币转账以及余额查询--java(web3j)
ERC20代币转账以及余额查询–java(web3j) 准备工作:转账之前你得有一个ERC20代币,代币发行戳这里,可以在测试网上进行测试. 因为发行代币本质就是部署智能合约,是需要消耗gas的,代币 ...
- Satori变种正在通过替换钱包地址盗取ETH数字代币
360网络安全研究院2017年12月5日发布关于Satori的 文章,提到Satori僵尸网络正在以前所未有的速度快速传播.自从文章发布以后,安全社区.ISP.供应链厂商共同协作,Satori 的控制 ...
- 代币转账_手把手教你从源代码开始搭建多节点以太坊私链(五)部署智能合约及代币发行...
一.安装以太坊合约编译环境 安装solc 智能合约代码的编译可以通过第三方平台或者软件.不过,为了安全起见,还是搭建自己的编译器比较好.(But be aware that if the compil ...
- 超级简单的EOS代币转账教程(EETH)
ethsidechain(EETH)是一个致力于在EOS中实现ETH侧链的项目,实现ETH和EOS互通. 详细教程请点击这里[EETH转账免费领取]
- Evm链原生代币转账
func (ob *Payer) Transfer(amount *big.Int) (string, error) { senderAddr := ethcrypto.PubkeyToAddress ...
- java使用web3J进行代币转账、余额查询
<!-- io常用工具类 --><dependency><groupId>commons-io</groupId><artifactId>c ...
- python字符串类库_Python开发以太坊的类库Web3.py V4的新功能
Web3.py第4版的第一个测试版于2017年11月中旬发布,此后又发布了5个版本,目前已经稳定发布到4.6.主要版本变化意味着一些向后兼容的更改,以及这些更改启用的一些全新功能.感兴趣的话请继续阅读 ...
- android web3j 代币查询_使用Web3.js查询以太币和代币余额以及转账
前言 前面的文章也提到了,使用web3.js可以与以太坊进行互动.这篇文章的主要内容如下:解决web3.js版本问题 2.使用web3.js查询以太币及代币余额,以及进行以太币和代币转账 1.web3 ...
最新文章
- 案例十:输入一批整数,输出其中的最大值和最小值,输入数字0时结束循环。...
- 前端学习(1301):gulp建立任务csso和less
- diskgenius 数据迁移_活见鬼,明明删除了数据,空间却没减少! - *IT界农民工*
- c 数据压缩算法_Redis存储总是心里没底?你大概漏了这些数据结构原理
- T-SQL select语句连接两个表
- WinForm 对EXCEL 的操作(三)
- 小米回应“海量备货致亏损”;美团饿了么“偷听”?苹果发布新 iPad | 极客头条...
- 推荐JS插件:imagesLoaded,监测图片加载情况并提供相应的事件(加载成功/失败)...
- 【CarMaker学习笔记】CarMaker Python API 接口使用方法
- 数据库系统工程师怎么备考?
- 常见的软文标题写作策略
- python shutil删除_Python标准库shutil中用于删除文件夹的方法是( )
- 找软件测试工作自测,测试经验分享:做一个靠谱的软件测试人员
- -webkit-touch-callout: none;禁止ios弹出菜单,长按图片保存到手机时
- #POW和POS的优势和劣势
- [Linux]生产者消费者模型(基于BlockQueue的生产者消费者模型 | 基于环形队列的生产者消费者模型 | 信号量 )
- BPM流程引擎功能对比
- 棋盘麦粒问题编程python_棋盘麦粒问题
- linux tar 7z,.tar.gz和.gz或.tar.7z和.7z有什么区别?
- 基于uclinux 的CAN 总线嵌入式驱动编程