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

如何用Python正确与NFT合约交互完成X2Y2全量授权?

解决X2Y2挂单前的NFT授权问题

首先明确:ERC721的setApprovalForAll函数本身不需要传入你的钱包地址,因为合约会通过以太坊交易的msg.sender自动获取发起授权的账户(也就是你的钱包地址)。你当前的代码只是创建了函数调用对象,但没有签名和发送交易,这是核心问题。

正确的授权步骤(Python示例)

  1. 先确认X2Y2的ERC721 Delegate合约地址(比如以太坊主网的地址是0x74312363e45DCaBA76c59ec49a7Aa8A65a67EeD3,请以X2Y2官方文档为准)
  2. 完整的授权代码需要包含交易签名和发送流程,示例如下:
from web3 import Web3

# 初始化Web3连接
w3 = Web3(Web3.HTTPProvider(node_url, request_kwargs={"proxies": proxy}))

# 你的钱包信息
private_key = "你的钱包私钥"
wallet_address = "你的钱包地址"

# NFT合约配置
nft_contract_addr = "0x705B9DBD0D5607BEAFe12E2fB74d64268d3bA35F"
nft_abi = 你的NFT合约ABI

# X2Y2授权目标合约地址
x2y2_delegate_addr = "X2Y2的ERC721 Delegate合约地址"

# 获取NFT合约实例
nft_contract = w3.eth.contract(address=nft_contract_addr, abi=nft_abi)

# 构建交易基础参数
nonce = w3.eth.get_transaction_count(wallet_address)
gas_price = w3.eth.gas_price
gas_limit = 100000  # 授权交易的gas上限,该值足够覆盖操作消耗

# 组装授权交易
tx = nft_contract.functions.setApprovalForAll(x2y2_delegate_addr, True).build_transaction({
    "chainId": w3.eth.chain_id,
    "from": wallet_address,
    "nonce": nonce,
    "gasPrice": gas_price,
    "gas": gas_limit
})

# 私钥签名交易
signed_tx = w3.eth.account.sign_transaction(tx, private_key=private_key)

# 发送交易到链上
tx_hash = w3.eth.send_raw_transaction(signed_tx.rawTransaction)

# 等待交易确认
tx_receipt = w3.eth.wait_for_transaction_receipt(tx_hash)
print(f"授权成功,交易哈希: {tx_hash.hex()}")

关键说明

  • setApprovalForAll的两个参数:第一个是被授权的合约地址(X2Y2的Delegate合约),第二个是授权开关(True表示允许该合约转移你所有的该类NFT)
  • 你的钱包地址是通过交易签名来确认的,合约执行时msg.sender就是你的地址,所以函数不需要额外传入你的地址
  • 必须完成交易发送并等待链上确认,授权才会生效,之后才能正常使用X2Y2 API创建挂单

内容的提问来源于stack exchange,提问作者对亮星

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 11:30:50