首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能批准safeTransfer的合同

不能批准safeTransfer的合同
EN

Ethereum用户
提问于 2021-03-15 08:44:11
回答 2查看 527关注 0票数 0
代码语言:javascript
复制
pragma solidity 0.8;

import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/utils/ERC721Holder.sol";

import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/IERC721.sol";

contract TokenTicket1 is ERC721Holder{

     IERC721 public Token;

     constructor (address _token) public {
         Token = IERC721(_token);
     }

     function _approval(uint id) external{
         Token.approve(address(this), id);
     }

     
     function deposit(uint id) external{
         Token.safeTransferFrom(msg.sender, address(this), id);
         
     }
     
     function withdraw(uint Id) external{
         Token.safeTransferFrom(address(this), msg.sender, Id);
     }
     
}

令牌地址-> https://rinkeby.etherscan.io/token/0x5ff5a01a288c44f5bacab3291532a74c16642556

这是我得到的错误:

EN

回答 2

Ethereum用户

发布于 2021-03-15 14:38:34

这一行Token.approve(address(this), id)是错的。它请求令牌来批准合同本身,这是不需要的。

其意图应该是msg.sender请求令牌来批准合同。该操作不能在约定中编码,必须由用户显式执行。

在javascript中,

代码语言:javascript
复制
Token.approve(TokenTicket1_address, ID).send({from: user_address})
票数 1
EN

Ethereum用户

发布于 2021-03-15 11:37:21

首先,除非您在etherscan.io中验证您的合同,否则合同代码将不会为任何人所读。

您正在使用一个接口来访问ERC721协议。该契约有任何mint()函数来创建令牌吗?谁是目前的权杖所有者?

您没有提到哪个函数调用会给您带来这个错误,但我猜这是approve()函数调用方,并告诉您该函数的调用方不拥有令牌或不具有审批角色。

您目前在本合同中拥有的approval()deposit()函数只有在以前已被铸造到正在执行这些函数的帐户上时才能工作。

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

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

复制
相关文章

相似问题

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