【发布时间】:2023-01-03 21:37:17
【问题描述】:
是否有真实世界的嵌套映射示例? 前一天我在处理映射函数,我发现许多真实世界的应用程序都用于简单映射,而不是用于嵌套映射。请帮忙 enter image description here
【问题讨论】:
标签: javascript blockchain solidity
是否有真实世界的嵌套映射示例? 前一天我在处理映射函数,我发现许多真实世界的应用程序都用于简单映射,而不是用于嵌套映射。请帮忙 enter image description here
【问题讨论】:
标签: javascript blockchain solidity
一个非常常见的案例是ERC-20 和其他代币标准上的批准机制。
mapping (address => mapping (address => uint256)) approvals;
此结构用于跟踪令牌批准。示例:“爱丽丝(第一个地址)赞成鲍勃(第二个地址)花100(单位)她的代币”。
比“人与人之间的批准”更常见的情况通常是一个人对 DApp 的批准。例如:“Alice 批准 Uniswap 从她的钱包中提取 100 USDT。” Uniswap 被编程为仅在她用 USDT 购买其他一些代币时才接受她的 USDT。
出于同样的原因,它也用于 OpenZeppelin ERC20 implementation。
【讨论】:
是的,今天我有一个这样的例子: 在 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;
【讨论】:
是的 代币合约中的批准机制使用嵌套映射。 ERC1155 合约使用嵌套映射来记录地址的余额。 行号 24 https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/ERC1155.sol
【讨论】: