Magic Eden API调用buy指令异常:返回200但无tx及出价记录
问题分析与解决
核心问题
你的代码存在三个关键错误,导致无法生成实际出价交易:
- 请求方法错误:
/v2/instructions/buy接口需要用POST请求,而非GET。GET请求仅返回交易创建指令,不会触发签名和广播流程。 - 参数格式错误:URL中
buyer的值被单引号包裹,authorization头里的私钥也加了单引号,这会导致接口无法正确解析参数。 - 缺少交易签名与广播步骤:接口返回的
buffers是未签名的交易指令,你需要用钱包对其签名后广播到Solana网络,才会生成可查的出价记录。
修正后的代码示例
import requests from solders.keypair import Keypair from solders.transaction import VersionedTransaction import base64 # 替换为你的实际信息 BUYER_WALLET = "你的钱包地址" PRIVATE_KEY = "你的钱包私钥(不带单引号)" AUCTION_HOUSE_ADDR = "E8cU1WiRWjanGxmn96ewBgk9vPTcL6AEZ1t6F6fkgUWe" TOKEN_MINT = "4StP8k8MFsSug39xF4Y4CK3tS6fPxA3qsTTXAUFDHqv5" PRICE = 0.13 url = "https://api-mainnet.magiceden.dev/v2/instructions/buy" headers = { "accept": "application/json", "authorization": f"Bearer {PRIVATE_KEY}", "Content-Type": "application/json" } # POST请求参数 payload = { "buyer": BUYER_WALLET, "auctionHouseAddress": AUCTION_HOUSE_ADDR, "tokenMint": TOKEN_MINT, "price": PRICE } # 1. 获取交易指令 response = requests.post(url, json=payload, headers=headers) tx_data = response.json() # 2. 解码交易buffer并签名 if "buffer" in tx_data: decoded_buffer = base64.b64decode(tx_data["buffer"]) tx = VersionedTransaction.from_bytes(decoded_buffer) keypair = Keypair.from_base58_string(PRIVATE_KEY) signed_tx = keypair.sign_message(tx.message) signed_tx_bytes = VersionedTransaction(tx.message, signed_tx).to_bytes() # 3. 广播交易到Solana主网 rpc_url = "https://api.mainnet-beta.solana.com" rpc_headers = {"Content-Type": "application/json"} rpc_payload = { "jsonrpc": "2.0", "id": 1, "method": "sendTransaction", "params": [base64.b64encode(signed_tx_bytes).decode("utf-8"), {"skipPreflight": False}] } rpc_response = requests.post(rpc_url, json=rpc_payload, headers=rpc_headers) print("交易广播结果:", rpc_response.json()) else: print("获取交易指令失败:", tx_data)
关键说明
- 先安装依赖:
pip install requests solders,solders用于处理Solana的交易签名逻辑。 - 私钥直接使用原始字符串,不要添加任何引号包裹。
- 广播交易可使用Solana官方RPC节点,也可替换为其他第三方节点。
内容的提问来源于stack exchange,提问作者Antonio Ruiz
相关产品推荐
相关产品推荐

