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

使用Ethers监听OpenSea合约时如何获取NFT合集地址与代币ID?

解决方案

1. 核心数据获取逻辑

你监听的是OpenSea Wyvern V2合约的OrdersMatched成交事件,你需要的NFT合集地址、代币ID不需要通过metadata字段解码,通过返回的sellHash字段查询链上订单信息即可稳定获取。

2. 具体实现步骤

  • 第一步:确保你初始化的OpenSea合约包含完整的ABI,至少包含orders查询方法的ABI定义:
function orders(bytes32 orderHash) external view returns (
  address exchange,
  address maker,
  address taker,
  uint256 makerRelayerFee,
  uint256 takerRelayerFee,
  uint256 makerProtocolFee,
  uint256 takerProtocolFee,
  address feeRecipient,
  uint8 feeMethod,
  uint8 side,
  uint8 saleKind,
  address target,
  uint8 howToCall,
  bytes calldata,
  bytes replacementPattern,
  address staticTarget,
  bytes staticExtradata,
  uint256 paymentToken,
  uint256 basePrice,
  uint256 extra,
  uint256 listingTime,
  uint256 expirationTime,
  uint256 salt
);
  • 第二步:在事件监听回调中调用orders方法查询订单详情,获取合集地址:
provider.on("OrdersMatched", async (args) => {
  // 从事件参数中取卖单哈希
  const sellHash = args.sellHash;
  // 查询链上订单信息
  const order = await openseaContract.orders(sellHash);
  // order.target 就是NFT合集的合约地址
  const collectionAddress = order.target;

  // 第三步:解码订单的calldata字段获取代币ID
  // 切掉calldata前4字节的函数选择器,解码转账参数
  const calldata = order.calldata.slice(10); // 0x前缀+4字节函数选择器共10个字符
  const [from, to, tokenId] = ethers.utils.defaultAbiCoder.decode(
    ["address", "address", "uint256"],
    "0x" + calldata
  );
  console.log("合集地址", collectionAddress, "代币ID", tokenId.toString());

  // 第四步:获取合集详情
  const erc721Contract = new ethers.Contract(collectionAddress, [
    "function name() view returns (string)",
    "function symbol() view returns (string)"
  ], provider);
  const collectionName = await erc721Contract.name();
  const collectionSymbol = await erc721Contract.symbol();
  console.log("合集名称", collectionName, "合集标识", collectionSymbol);
});

3. 关于metadata字段的说明

你提到的metadata字段为预留扩展字段,不同订单类型的编码规则不一致,不建议作为稳定的数据来源,通过sellHash查询订单结构体的方式兼容性更高,支持所有OpenSea的订单类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:45:04