我想创建一个NFT市场网站,人们可以列出和购买NFT。它将是多链支持多边形和以太链。它将同时接受ERC721和ERC1155令牌。
我想知道,如果我不知道那里有合同abi,我如何在我的网站上列出这些标记?
有什么方法可以让我从合同地址得到合同的abi,这样我就可以调用NFT合同的方法吗?
这是我的代码,我试图这样做:-
async function getAllNFTs() {
const key = simpleCrypto.decrypt(cipherEth);
const provider = new ethers.providers.JsonRpcProvider(mainnet);
const wallet = new ethers.Wallet(key, provider);
const signer = wallet.provider.getSigner(wallet.address);
const contract = new ethers.Contract(EMNMarketAddress, EMNMarket, signer);
const data = await contract.getAvailableNft();
const items = await data.map(async i => {
const tokenContract = i.nftContract.toString();
console.log(tokenContract);
const tokenUri = await tokenContract.tokenURI(i.tokenId)
const meta = await axios.get(tokenUri)
let price = ethers.utils.formatUnits(i.price.toString(), 'ether')
let item = {
price,
tokenId: i.tokenId.toNumber(),
seller: i.seller,
owner: i.owner,
image: meta.data.image,
name: meta.data.name,
description: meta.data.description,
}
return item
})
setNfts(items);
setLoadingState('loaded');
}它给了我以下错误:-
Uncaught (in promise) TypeError: tokenContract.tokenURI is not a function有人能告诉我我哪里做错了吗?
发布于 2023-03-04 00:16:11
该合同应涵盖ERC721和ERC1155。我去nft的方法是这个吗?
function setDirectSell(address _NFT, uint _tokenID, uint _price) external isOwner(_NFT, _tokenID){
require(tokenAuction[_NFT].isOnAuction == false, 'Tokens on auction cannot be listed to direct sell');
IERC721(_NFT).approve(address(this), _tokenID);
marketSell[_NFT].isOnSell = true;
marketSell[_NFT].tokenID = _tokenID;
marketSell[_NFT].price = _price;
emit TokenForSell(_NFT, _tokenID);
}和
function marketBuy(address _NFT, uint _tokenID) external payable isOwner(_NFT, _tokenID){
require(msg.value >= marketSell[_NFT].price, 'Less ether then the price');
IERC721(_NFT).transferFrom(address(this), msg.sender, _tokenID);
emit TokenSold(_NFT, _tokenID);
}我通过以下方式控制出售哪些令牌:
struct Market {
bool isOnSell;
uint tokenID;
uint price;
}
mapping(address => Market) marketSell;https://ethereum.stackexchange.com/questions/146825
复制相似问题