Web3js

如何在智能合約中讀取雜湊圖/數組中的所有數據

  • October 11, 2020

要讀取 ethers/web3.js 中的映射,我們這樣做:

const value = await myContract.someMapping(someKey);

我們可以一次在映射中搜尋一個鍵/值。如何獲取映射中的所有值而不是一個值?這同樣適用於可以檢索數組的一個索引的數組:

const value = await myContract.someArray(0);

如何檢索整個數組?

對於數組,您需要在合約中添加一個函式,例如:

uint[] private someArray;

function getSomeArray() external view returns (uint[] memory) {
   return someArray;
}

對於映射,您需要擴展契約設計,例如:

每次在映射中添加/刪除項目時,還要從數組中添加/刪除該項目(並實現一個函式以返回該數組,如上所示)。

為了避免此處的冗餘,您實際上希望更改映射以映射該數組中的索引而不是實際數據。

如果項目大於索引(通常是類型uint),這可能會節省氣體。

引用自:https://ethereum.stackexchange.com/questions/88150