簡體   English   中英

Solidity 數組的動態大小最佳實踐

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM