我试图发送一个NFT到一个智能契约来托管,但是当我得到一个关于未使用的变量的错误时,很难实现重写函数onERC721Received --这就是我得到的错误吗?
Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.
--> contracts/NftEscrow.sol:11:79:
|
11 | function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes memory _data) public override returns(bytes4) {
| ^^^^^^^^^^^^^^^^^^这是最明智的合同
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol";
contract nftescrow is IERC721Receiver {
enum ProjectState {newEscrow, nftDeposited, cancelNFT, ethDeposited, canceledBeforeDelivery, deliveryInitiated, delivered}
address payable public sellerAddress;
address payable public buyerAddress;
address public nftAddress;
uint256 tokenID;
bool buyerCancel = false;
bool sellerCancel = false;
ProjectState public projectState;
constructor()
{
sellerAddress = payable(msg.sender);
projectState = ProjectState.newEscrow;
}
function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) public override returns (bytes4) {
return this.onERC721Received.selector;
}
function depositNFT(address _NFTAddress, uint256 _TokenID)
public
inProjectState(ProjectState.newEscrow)
onlySeller
{
nftAddress = _NFTAddress;
tokenID = _TokenID;
ERC721(nftAddress).safeTransferFrom(msg.sender, address(this), tokenID);
projectState = ProjectState.nftDeposited;
}
}
}有人知道怎么解决这个问题吗?
发布于 2022-07-29 13:24:02
你可以让警告像这样消失:
function onERC721Received(address, address, uint256, bytes calldata) external pure returns (bytes4) {
return IERC721Receiver.onERC721Received.selector;
}发布于 2022-03-28 12:45:37
这只是一个警告--而不是错误--所以即使有警告,合同也会进行编译。
编译器告诉您您正在定义参数operator、tokenId、from和data,但您没有使用它们。但是,ERC721标准要求onERC721Received()函数接受所有这些参数,即使您可能不使用它们,因为函数选择器是从它们确定的。
所以你可以安全地忽略这个警告。
https://stackoverflow.com/questions/71646570
复制相似问题