小编sun*_*nce的帖子

ERC721:转账调用者不是所有者也不是批准的

我有一个 nftToken 合约,可以将代币铸造到 msg.sender,然后我在市场合约中有一个函数,可以将 nft 从所有者转移到市场合约。但是,我收到一条错误消息:ERC721:转账调用者不是所有者也不是批准的。

这是我的 nftContract (nft) 函数片段:

function createToken(string memory tokenURI) public returns (uint) {
  _tokenIds.increment();
  uint256 newItemId = _tokenIds.current();

  _mint(msg.sender, newItemId);
  _setTokenURI(newItemId, tokenURI);
  setApprovalForAll(contractAddress, true);
  return newItemId;
}
Run Code Online (Sandbox Code Playgroud)

这是我的市场代码(stripeMarket Contract)函数片段:

function createItem(
    address nftContract,
    uint256 tokenId
    ) public payable{
     address _owner = IERC721(nftContract).ownerOf(tokenId);
     IERC721(nftContract).transferFrom(_owner, address(this),tokenId);
      IERC721(nftContract).approve(address(this),tokenId);    
}
Run Code Online (Sandbox Code Playgroud)

在这里我尝试使用 web3 从前端调用它:

const getItems=async()=>{
      await contracts.nft.methods.createToken("https://i.ytimg.com/vi/nYxGhQYi0s4/maxresdefault.jpg").send({from: accounts[0]});
      const owners = await contracts.nft.methods.ownerOf(1).call({from:accounts[0]});
      await contracts.stripeMarket.methods.createItem(contracts.nft._address,1).send({from: {owners}}); 
}
Run Code Online (Sandbox Code Playgroud)

但我收到错误:

ERC721:转账调用者不是所有者,也不是经过批准的。

javascript solidity smartcontracts web3js nft

7
推荐指数
1
解决办法
1万
查看次数

标签 统计

javascript ×1

nft ×1

smartcontracts ×1

solidity ×1

web3js ×1