Web3js
如何在智能合約中讀取雜湊圖/數組中的所有數據
要讀取 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
),這可能會節省氣體。