You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Polygon链上自动归集多个MetaMask钱包的ERC20代币?

Polygon链ERC20自动转账解决方案及代码报错修复

一、先解决余额查询代码报错问题

你的代码报错核心原因是连接的节点不对——你用了以太坊主网的Infura节点,但目标代币部署在Polygon链上,必须连接Polygon专属RPC节点。补充几个关键点:

  • 替换RPC节点:把https://mainnet.infura.io/v3/...换成Polygon主网节点,比如官方节点https://polygon-rpc.com,或Infura的Polygon专属节点(需在Infura后台开启Polygon服务)
  • ERC20跨链通用:Polygon上的ERC20和以太坊的ERC20遵循同一标准,没有实现差异,ethtoken.abi.EIP20_ABI作为标准ABI完全可用
  • 地址校验:确保查询的钱包地址n1是Polygon链上的有效地址(0x开头的42位字符串格式)

修正后的余额查询代码:

from ethtoken.abi import EIP20_ABI
from web3 import Web3, HTTPProvider

# 连接Polygon主网节点
w3 = Web3(HTTPProvider("https://polygon-rpc.com"))

contract_address = '0x3a9A81d576d83FF21f26f325066054540720fC34'
contract = w3.eth.contract(address=contract_address, abi=EIP20_ABI)

n1 = '0x你的钱包地址'
# 查询代币小数位,将原始余额转换为可读格式
decimals = contract.functions.decimals().call()
raw_balance = contract.functions.balanceOf(n1).call()
readable_balance = raw_balance / (10 ** decimals)
print(f"钱包{n1}的代币余额:{readable_balance}")

二、实现自动转账到中心钱包的完整流程

核心步骤

  1. 连接Polygon链专属RPC节点
  2. 用标准ERC20 ABI加载目标代币合约
  3. 准备MetaMask钱包私钥(用于签名交易,务必保证私钥安全)
  4. 构建transfer交易并签名发送

完整代码示例

from ethtoken.abi import EIP20_ABI
from web3 import Web3, HTTPProvider
import os

# 1. 连接Polygon主网节点
w3 = Web3(HTTPProvider("https://polygon-rpc.com"))
assert w3.is_connected(), "无法连接到Polygon节点,请检查RPC地址"

# 2. 配置核心参数
TOKEN_ADDRESS = '0x3a9A81d576d83FF21f26f325066054540720fC34'
CENTRAL_WALLET = '0x你的中心钱包地址'
# 从环境变量读取私钥,避免硬编码泄露
USER_PRIVATE_KEY = os.getenv("METAMASK_PRIVATE_KEY")
USER_WALLET = w3.eth.account.from_key(USER_PRIVATE_KEY).address

# 3. 加载ERC20合约
contract = w3.eth.contract(address=TOKEN_ADDRESS, abi=EIP20_ABI)
decimals = contract.functions.decimals().call()

# 4. 查询余额并确认可转账
raw_balance = contract.functions.balanceOf(USER_WALLET).call()
readable_balance = raw_balance / (10 ** decimals)
print(f"当前可用余额:{readable_balance}")

# 5. 构建转账交易(示例转账1个代币,按需调整金额)
TRANSFER_AMOUNT = 1 * (10 ** decimals)
# 基础交易参数
tx_base = {
    "from": USER_WALLET,
    "nonce": w3.eth.get_transaction_count(USER_WALLET),
    "gasPrice": w3.eth.gas_price,
    "chainId": 137  # Polygon主网链ID
}
# 预估gas限制
tx_base["gas"] = contract.functions.transfer(CENTRAL_WALLET, TRANSFER_AMOUNT).estimate_gas(tx_base)
# 构建完整交易数据
tx_data = contract.functions.transfer(CENTRAL_WALLET, TRANSFER_AMOUNT).build_transaction(tx_base)

# 6. 签名并发送交易
signed_tx = w3.eth.account.sign_transaction(tx_data, private_key=USER_PRIVATE_KEY)
tx_hash = w3.eth.send_raw_transaction(signed_tx.rawTransaction)
print(f"转账交易已发送,哈希:{w3.to_hex(tx_hash)}")

关键注意事项

  • 私钥安全:绝对不要把私钥直接写在代码里,建议用环境变量、加密文件等方式存储
  • Gas费准备:Polygon链需要MATIC支付gas费,转账钱包里必须有足够MATIC,否则交易失败
  • 批量处理:若要处理多个MetaMask钱包,只需遍历每个钱包的私钥,重复上述转账流程即可
  • 测试优先:先在Polygon测试网(Mumbai,链ID80001)验证代码,确认正常后再切换到主网

内容的提问来源于stack exchange,提问作者Zertyn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 07:46:00