首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何显示NFT市场中其他合同中的Nfts?

如何显示NFT市场中其他合同中的Nfts?
EN

Ethereum用户
提问于 2023-03-03 06:22:43
回答 1查看 40关注 0票数 2

我想创建一个NFT市场网站,人们可以列出和购买NFT。它将是多链支持多边形和以太链。它将同时接受ERC721和ERC1155令牌。

我想知道,如果我不知道那里有合同abi,我如何在我的网站上列出这些标记?

有什么方法可以让我从合同地址得到合同的abi,这样我就可以调用NFT合同的方法吗?

这是我的代码,我试图这样做:-

代码语言:javascript
复制
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');
    }

它给了我以下错误:-

代码语言:javascript
复制
Uncaught (in promise) TypeError: tokenContract.tokenURI is not a function

有人能告诉我我哪里做错了吗?

EN

回答 1

Ethereum用户

发布于 2023-03-04 00:16:11

该合同应涵盖ERC721和ERC1155。我去nft的方法是这个吗?

代码语言:javascript
复制
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);
    }

代码语言:javascript
复制
    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);
    }

我通过以下方式控制出售哪些令牌:

代码语言:javascript
复制
struct Market {
        bool isOnSell;
        uint tokenID;
        uint price;
    }

mapping(address => Market) marketSell;
票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/146825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档