【问题标题】:Why does event in NFT (ERC721) token gets address(0) as first argument?为什么 NFT (ERC721) 令牌中的事件将地址 (0) 作为第一个参数?
【发布时间】:2021-12-26 18:17:25
【问题描述】:

我正在学习 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) 代表空地址。这是 Transfer 事件:

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

【问题讨论】:

    标签: ethereum solidity smartcontracts nft erc721


    【解决方案1】:

    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);
    

    【讨论】:

      猜你喜欢
      • 2023-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-12
      • 2017-10-09
      • 2014-04-17
      • 2018-11-01
      相关资源
      最近更新 更多