nft的所有者存储在哪里?

Where is the owner of an nft is stored?

我知道 nft 是通过智能合约铸造到区块链中的。但是所有者钱包存储在哪里?并且更改所有者还需要额外的智能合约?

每个令牌的所有者地址都存储在其收集合约中。

ERC-721 标准仅定义所有者应该可以通过调用 ownerOf() 函数检索,并将令牌 ID 作为唯一参数传递给它。它没有定义信息的存储方式。

但是许多实现使用 mapping。例如 OpenZeppelin implementation:

mapping(uint256 => address) private _owners;

function ownerOf(uint256 tokenId) public view virtual override returns (address) {
    address owner = _owners[tokenId];
    require(owner != address(0), "ERC721: owner query for nonexistent token");
    return owner;
}

changing the owner requires additionl smart contract?

假设收集合约遵循标准,它可以通过从所有者(非合约)地址执行任何转移功能来更改代币所有者(即转移代币)。

因此不需要额外的智能合约来转移代币。