[英]Solidity array's dynamic size best practices
我正在编写一个 NFT 市场智能合约,我遇到了一个关于 Solidity 数组的问题。
我有一个函数可以根据 id 数组检索令牌数组。 因为 Id 数组的大小是动态的,所以输出数组的大小也是动态的。
功能 :
function fetchUnsoldMarketItems(uint256[] memory _tokenIds) public view returns (MarketItem[] memory) {
uint arrayLen = _tokenIds.length;
uint itemsCount = 0;
for (uint i = 0; i < arrayLen; i++) {
if (idToMarketItem[_tokenIds[i]].sold == false) {
itemsCount +=1;
}
}
MarketItem[] memory items = new MarketItem[](itemsCount);
for (uint i = 0; i < arrayLen; i++) {
if (idToMarketItem[_tokenIds[i]].sold == false) {
MarketItem storage currentItem = idToMarketItem[_tokenIds[i]];
items[i] = currentItem;
}
}
return items;
}
首先,有没有更好的方法来编写这个函数并检索未售出的物品? 此外,如果在函数执行期间正在出售/购买 MarketItem,则第二个数组的长度将大于/小于预期。 我怎样才能防止这种情况?
我正在寻找任何类型的建议,因为我仍然是一个坚固的初学者!
在您的solidity代码中保存到nft效率不高,最佳实践是将它们保存在mangodb或sql db中并从此db中获取此信息
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.