-2

我正在学习 nft 智能合约的工作原理。我不明白为什么发出事件会收到address(0)

这是来自Openzeppeling ERC721的 _mint 函数

function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;
        // i am stuck at here
        emit Transfer(address(0), to, tokenId);
        _afterTokenTransfer(address(0), to, tokenId);
    }

当我们发出 Transfer 事件时,为什么要使用address(0). address(0)代表空地址。这是转移事件:

event Transfer(
     address indexed from, 
     address indexed to, 
     uint256 indexed tokenId);
4

1 回答 1

0

在ERC-721标准(被认为是第一个 NFT 标准)中定义了在铸造令牌时将零地址作为发送方参数传递:

/// @dev This emits when ownership of any NFT changes by any mechanism.
///  This event emits when NFTs are created (`from` == 0) and destroyed
///  (`to` == 0). Exception: during contract creation, any number of NFTs
///  may be created and assigned without emitting Transfer. At the time of
///  any transfer, the approved address for that NFT (if any) is reset to none.
event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);
于 2021-12-27T11:27:59.470 回答