Solidity
在沒有所有權的情況下轉移 NFT 代幣
我想知道 opensea 如何在沒有該代幣所有權的情況下將代幣轉移給買方。而且他們根本沒有使用託管賬戶。在混音中,如果我嘗試在沒有所有權的情況下轉移代幣,它不起作用並給出錯誤“ERC721:轉接呼叫者既不是所有者也不是批准的”。我怎麼能像opensea一樣做這個動作..
OpenSea 有一個合約ERC721Tradable.sol,將 OpenSea 運營商列入白名單
/** * Override isApprovedForAll to whitelist user's OpenSea proxy accounts to enable gas-less listings. */ function isApprovedForAll(address owner, address operator) override public view returns (bool) { // Whitelist OpenSea proxy contract for easy trading. ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress); if (address(proxyRegistry.proxies(owner)) == operator) { return true; } return super.isApprovedForAll(owner, operator); }
您可以在沒有所有權的情況下轉讓代幣。如果您給予地址批准,該地址可以轉移代幣。
function approve(address _approved, uint256 _tokenId)
此功能用於給予地址批准。在 ERC-721 的傳遞函式中。該
from
地址必須是令牌所有者或獲得批准。這是傳遞函式
function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); }