【问题标题】:Easy way to view a list of the tokens owned by a user?查看用户拥有的代币列表的简单方法?
【发布时间】:2022-11-09 23:24:45
【问题描述】:

我确信这可以在前端完成,也可以从 Solidity 完成。我看到一些看起来效率低下的帖子,据我了解,当 ERC721 包已经具备获取此信息所需的功能时,他们正在创建新的映射并将不必要的数据存储到区块链中。

想出了第一部分的答案!

 function ownerOfTokenIds(address tokenOwner) external view returns (uint256[] memory) {
        uint256[] memory result = new uint256[](balanceOf(tokenOwner));
        uint256 counter = 0;
        for (uint256 i = 0; i < tokenCounter; i++) {
            if (ownerOf(i) == tokenOwner) {
                result[counter] = i;
                counter++;
            }
        }
        return result;
    }

【问题讨论】:

  • 我在 Gnosis 的 Multisig Wallet 中看到了类似的代码 sn-p 并且想法相同。我认为当前版本的 Solidity 没有更有效的方法可以做到这一点。

标签: blockchain solidity smartcontracts nft openzeppelin


【解决方案1】:

我在第一篇文章中修复了代码,问题是我必须声明一个名为 result 的 uint[] 内存变量并将其设置为等于一个新的 uint 数组。数组的长度应该是该所有者拥有的令牌数。

然后可以在“扩展运算符”的前端使用我想!

【讨论】:

    【解决方案2】:

    您可以发布更多代码吗?因为当我尝试实现这一点时,我收到一个错误 DeclarationError: Undeclared identifier for balanceOf 和 ownerOf。

    【讨论】:

      猜你喜欢
      • 2021-11-21
      • 2018-07-06
      • 1970-01-01
      • 1970-01-01
      • 2010-12-13
      • 1970-01-01
      • 2014-12-04
      • 1970-01-01
      相关资源
      最近更新 更多