我有一个最大供应量为1000的NFT集合。所有NFT都已铸造,其中totalSupply==maxSupply。
检索所有1000个地址及其相关令牌ID的最佳方法是什么?
我尝试了以下操作,但结果没有如预期的那样起作用。我哪里错了?
非常感谢您的帮助!
mapping(uint256 => address) private getMintedAddress;
function getAllAddresses() public view returns (address[] memory) {
uint256 totalMinted = totalSupply();
address[] memory tokenAddresses = new address[](totalMinted);
for (uint256 i = 1; i < totalMinted; i++) {
tokenAddresses[i] = getMintedAddress[i];
}
return tokenAddresses;
}
在solidity映射中,所有值都存在。在javascript中,如果我们试图访问一个不存在的键,objectName['keyThatDesNotExist'],我们会得到未定义。但在solidity中,我们会根据这些值获得默认值。如果所有值都是字符串,则默认值为空字符串";如果所有值均为整数,则默认为0;如果所有的值都是布尔值,则缺省值为false;如果所有数值都是地址类型,则缺省为0x0000000000000000000000000000000000000000
,与address(0)
相同;。这意味着getMintedAddress[i]
不存在,因此solidity返回默认地址(0(
创建nft时,更新
//由于我没有初始化默认值将为0uint公共索引ForSenders;
function createNFT() public returns(bytes32){
// setting id is important. easy way to start create a top level state
// first item will start from 0: 0 -->address
getMintedAddress[indexForSenders]=msg.sender;
indexForSenders+=1
.....
}