首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Remix传输ERC721令牌时的气体估计误差

Remix传输ERC721令牌时的气体估计误差
EN

Stack Overflow用户
提问于 2022-11-16 05:01:34
回答 1查看 13关注 0票数 0

我目前正在实现一个ERC721令牌标记函数契约,但是当我添加传输代码时,会出现一个气体估计错误。

MarineBluesContract(_nftContract).transferFrom(msg.sender, address(this), _tokenId);

代码语言:javascript
复制
function stake(uint256 _tokenId, address _nftContract)
        external
        nonReentrant
    {
        require(ntfContractList[_nftContract], "Not allowed NFT contract");
        require(msg.sender != address(0), "Invalid staker address");
        require(_tokenId != 0, "Invalid token id");
        require(MarineBluesContract(_nftContract).ownerOf(_tokenId) == msg.sender, "Not token owner");

        // Staking start time
        uint48 timestamp = uint48(block.timestamp);

        // Staking to contract
        MarineBluesContract(_nftContract).transferFrom(msg.sender, address(this), _tokenId);

        // Save staking information
        stakedTokens.push(
            StakedToken(msg.sender, _tokenId, _nftContract, timestamp, false)
        );

        // Increase in staking count
        totalStaked++;

        emit Stake(msg.sender, _tokenId, _nftContract, timestamp);
    }

在这里输入图像描述

  1. 确保我有足够的以太
  2. 确保投注合同有足够的效力
  3. 使用setApprovalForAll授权投注合同,以便它能够传输我的NFT

即使采取上述步骤,也会产生气体估计误差。我不知道为什么,但如果你能猜到或者我做错了什么,请告诉我。提前谢谢!

EN

回答 1

Stack Overflow用户

发布于 2022-11-16 10:07:15

基于require()条件验证_nftContract.ownerOf()没有失败这一事实,我假设您的契约与_nftContract正确地部署在同一个网络上。

transferFrom()可能会因为以下几个原因而失败。最常见的原因可能是:

  • 令牌发送方(在第一个参数中指定)没有批准事务发送方(在本例中是您的合同)来操作这个特定的_tokenId
  • _tokenId不属于令牌发送方。
  • _tokenId不存在

请注意,您正在从契约执行transferFrom()函数-因此,msg.sender (用户执行stake()函数)需要将直接授予yourContract

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74455405

复制
相关文章

相似问题

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