【问题标题】:Is there any real world example of nested mappings of solidity?是否有真实世界的嵌套映射示例?
【发布时间】:2023-01-03 21:37:17
【问题描述】:

是否有真实世界的嵌套映射示例? 前一天我在处理映射函数,我发现许多真实世界的应用程序都用于简单映射,而不是用于嵌套映射。请帮忙 enter image description here

【问题讨论】:

    标签: javascript blockchain solidity


    【解决方案1】:

    一个非常常见的案例是ERC-20 和其他代币标准上的批准机制。

    mapping (address => mapping (address => uint256)) approvals;
    

    此结构用于跟踪令牌批准。示例:“爱丽丝(第一个地址)赞成鲍勃(第二个地址)花100(单位)她的代币”。

    比“人与人之间的批准”更常见的情况通常是一个人对 DApp 的批准。例如:“Alice 批准 Uniswap 从她的钱包中提取 100 USDT。” Uniswap 被编程为仅在她用 USDT 购买其他一些代币时才接受她的 USDT。

    出于同样的原因,它也用于 OpenZeppelin ERC20 implementation

    【讨论】:

      【解决方案2】:

      是的,今天我有一个这样的例子: 在 NFT 合约中,我想创建链接到地址的元数据映射。所以我试了一下:

      //create a mapping
      mapping(string => address) public metadataUri;
      
      //set a mapping
      metadataUri[_uri] = _address;
      

      但在那种情况下,如果我还有一个具有相同字符串的地址,第一个地址将覆盖所有具有相同字符串的下一个地址。所以在那种情况下我应该有这样的东西:

      //create a mapping
      mapping(string => mapping(address => uint)) public metadataUri;
      
      //set a mapping
      metadataUri[_stringURI][_address] = _uint;
      

      【讨论】:

        【解决方案3】:

        是的 代币合约中的批准机制使用嵌套映射。 ERC1155 合约使用嵌套映射来记录地址的余额。 行号 24 https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/ERC1155.sol

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-10-12
          • 2010-11-23
          • 1970-01-01
          • 2016-11-26
          • 1970-01-01
          • 2012-05-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多