Python 使用 Web3.py 进行 ETH 和代币转账

这篇具有很好参考价值的文章主要介绍了Python 使用 Web3.py 进行 ETH 和代币转账。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、安装 Web3.py

pip install web3.py

2、注册 Infura 获得节点服务
使用邮箱注册 Infura 账户后,创建一个项目,即可获得以太坊节点服务,进入设置即可看到链接的URL
web3py 转账,Python,以太坊,python,区块链
可以选择主网测试网等,会有两个链接,一个是使用HTTPS的一个是使用WebSocket,按你的需求选择一个就行了,注意:Infura 个人免费请求次数,是每天有十万个请求。
3、代码示例文章来源地址https://www.toymoban.com/news/detail-596311.html

from web3 import Web3
import json
import time
import os
import logging
from django.conf import settings
from decimal import Decimal


class PayEthOrToken(object):
    
    def __init__(self):
        # 设置web3
        self.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 和代币转账的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue3 使用 web3.js;钱包转账;唤醒钱包.......

    web3.js基本使用 本篇文章不适合没有经验的小白,需要对web3有一定的了解,所以有些参数需要自己懂! 准备 安装web3.js依赖包 npm install web3 文档教程地址:https://web3.tryblockchain.org/ 这是我自己封装的类 web3.js 直接复制过去就可以用

    2024年02月03日
    浏览(52)
  • Web3.py使用详解

    测试提供商 本地提供商 远程提供商 与以太坊区块链交互的最快方法是使用远程节点提供商,如Infura、Alchemy或QuickNode。您可以通过指定端点连接到远程节点,就像本地节点一样: 判断连接状态  使用web3创建账户 使用eth_account创建账户 效果与 web3 一致,安装web3.py会自动安装

    2024年02月16日
    浏览(39)
  • 使用nodejs和web3js来实现链接MetaMask钱包并取消风险代币授权

    随着区块链技术的快速发展,数字货币资产在投资及交易市场中得到了广泛的应用。而在数字货币交易过程中,钱包是一个非常重要的环节。比如MetaMask就是一款非常流行的区块链钱包,它可以让用户在浏览器中安全地管理自己的数字资产。 然而,在数字货币交易过程中也存

    2024年01月23日
    浏览(50)
  • 使用Node.js和Web3.js实现链接MetaMask钱包并批量创建钱包并且批量发送代币

    MetaMask是一款基于浏览器的插件钱包,它可以安全地存储、发送和接收以太坊(Ethereum)代币。而Web3.js是一款JavaScript库,可以通过它连接以太坊区块链网络并管理以太坊钱包。 在此文中,我们将学习如何使用Node.js和Web3.js编程语言编写代码,实现链接MetaMask钱包并批量创建钱

    2024年02月08日
    浏览(79)
  • Web3代币基本token概念

    上文 HTML页面通过Web3JS连接智能合约并调用其中接口我们算是小试牛刀 用html的web3连接到我们的 智能合约。 至少确定了 我们的开发路线是没问题的 那么 我们要先了解代币这个内容 代币在以太坊中 可以说像公司的股份资产 可以说像美元 可以说像黄金等等 这个币圈建议大家

    2024年02月16日
    浏览(32)
  • python 基于 Web3.py 和 Infura 网关采集链上数据

    Web3.py是与Ethereum交互的Python库。功能包括连接到以太坊网络节点、检索数据和向以太坊网络广播数据。 目前以太坊全节点数据量高达数TB,自建本地全节点不太现实,因此一般通过Infura等的网关来实现数据查询。在 Infura 新建一个项目获取API KEY 需求:识别当前用户地址持有的

    2024年02月02日
    浏览(48)
  • web3.eth.getPendingTransactions() 返回空?

    为什么以下给我一个空的结果? 根据 Geth 源代码,只会显示其 from 字段与您的个人帐户匹配的待处理交易。 代码:go-ethereum/api.go at ead814616c094331915b03edd82d4200a7880178 · ethereum/go-ethereum · GitHub

    2024年02月12日
    浏览(41)
  • java通过web3j获取ETH交易明细

        我们在项目里面如果想要得到用户的ETH交易明细怎么做呢?有两种方式:    1、直接获取ETH最新块的交易明细。    2、通过块获取用户的交易明细。 废话不多说,直接贴代码看了          下面是项目的相关依赖:

    2024年02月05日
    浏览(51)
  • web3j的基础用法-3ETH交易监听器

    demo简单实现了4种 监听区块 监听所有交易 监听待上链的交易 监听指定合约的交易事件(例如监控大户流转,实现跟单,抛售等后续逻辑) github 地址 https://github.com/jambestwick/we3jdemo

    2024年02月11日
    浏览(47)
  • 社交赛道的后起追赶者Damus有什么不一样?不发代币的Nostr让Web2和Web3都沉默了

    这是被串公钥刷屏一周,无论是在朋友圈还是推特 Facebook,关键性事件就是 Twitter 前首席执行官 Jack Dorsey 发推称,基于去中心化社交协议 Nostr 的社交产品 Damus 和 Amethyst 已分别在苹果 App Store 和谷歌 Google Play Store 上线,同时网页端 snort.social 也正式开放,其中 Damus 短短数日用

    2024年02月03日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包