javascript - 通过 JS API 在 OpenSea 上列出 NFT:Failed to extract transfer calldata 错误 400
问题描述
我正在尝试使用OpenSea JavaScript API来自动列出要出售的 NFT。我似乎无法弄清楚为什么我不断收到错误消息Error: API Error 400: ['Failed to extract transfer calldata']
。也许我没有正确输入一些数据?我的代码改编自这个例子。
资源
const opensea = require("opensea-js");
const OpenSeaPort = opensea.OpenSeaPort;
const Network = opensea.Network;
const MnemonicWalletSubprovider = require("@0x/subproviders")
.MnemonicWalletSubprovider;
const RPCSubprovider = require("web3-provider-engine/subproviders/rpc");
const Web3ProviderEngine = require("web3-provider-engine");
const MNEMONIC = "SECRET ...";
const NODE_API_KEY = "FROM INFURA";
const isInfura = true;
//const FACTORY_CONTRACT_ADDRESS = process.env.FACTORY_CONTRACT_ADDRESS;
const NFT_CONTRACT_ADDRESS = "0x495f947276749Ce646f68AC8c248420045cb7b5e";
const OWNER_ADDRESS = "0x3eb8eea9565418281f4cae934dd69e7ff2bb5949";
const NETWORK = "mainnet";
const API_KEY = process.env.API_KEY || ""; // API key is optional but useful if you're doing a high volume of requests.
const BASE_DERIVATION_PATH = `44'/60'/0'/0`;
const mnemonicWalletSubprovider = new MnemonicWalletSubprovider({
mnemonic: MNEMONIC,
baseDerivationPath: BASE_DERIVATION_PATH,
});
const network =
NETWORK === "mainnet" || NETWORK === "live" ? "mainnet" : "rinkeby";
const infuraRpcSubprovider = new RPCSubprovider({
rpcUrl: isInfura
? "https://" + network + ".infura.io/v3/" + NODE_API_KEY
: "https://eth-" + network + ".alchemyapi.io/v2/" + NODE_API_KEY,
});
const providerEngine = new Web3ProviderEngine();
providerEngine.addProvider(mnemonicWalletSubprovider);
providerEngine.addProvider(infuraRpcSubprovider);
providerEngine.start();
const seaport = new OpenSeaPort(
providerEngine,
{
networkName:
NETWORK === "mainnet" || NETWORK === "live"
? Network.Main
: Network.Rinkeby,
apiKey: API_KEY,
},
(arg) => console.log(arg)
);
exports.helloWorld = async (req, res) => {
// Example: simple fixed-price sale of an item owned by a user.
console.log("Auctioning an item for a fixed price...");
try {
const fixedPriceSellOrder = await seaport.createSellOrder({
asset: {
tokenId: "28370143653034713195993216915191765879963367987017833025925208213530804748289",
tokenAddress: NFT_CONTRACT_ADDRESS,
},
startAmount: 0.1,
expirationTime: 0,
accountAddress: OWNER_ADDRESS,
});
console.log(
`Successfully created a fixed-price sell order! ${fixedPriceSellOrder.asset.openseaLink}\n`
);
}
catch (error) {
console.log("ERROR",error);
}
};
完整日志
我从哪里得到数据
解决方案
你的代币标准是什么?
如果不是 ERC721,则需要将其指定为您schemaName
的资产对象,如下所示:
const fixedPriceSellOrder = await seaport.createSellOrder({
asset: {
tokenId: "28370143653034713195993216915191765879963367987017833025925208213530804748289",
tokenAddress: NFT_CONTRACT_ADDRESS,
schemaName: "ERC1155"
},
startAmount: 0.1,
expirationTime: 0,
accountAddress: OWNER_ADDRESS,
});
您可以在 Opensea 资产页面的 Details 选项卡中找到 Token Standard:
删除破折号,你很好。ERC1155
对我来说很好。
推荐阅读
- php - Docusign - API 连接 JWT - 需要同意
- c# - 如何在“Listview”中的最后一首歌曲之后停止播放音乐
- c# - 我正在尝试使用带有回归的 ML.NET 创建一个简单的神经网络,它返回指定的数字,但它返回一个不同的数字
- c++ - 将数据从文件 (.csv) 插入变量的功能不起作用
- r - 在R中打开带有日期和时间的excel文件
- symfony - Symfony - API 平台 - Vich Uploader 和漏洞问题
- r - R/dplyr:汇总数据而不分组
- javascript - 根据弹出输入填充输入字段
- node.js - 在参数 aws-sdk SQS 中发现意外的密钥“MessageDeduplicationID”
- r - 使用分层套索(hierNet)的可变重要性