Solidity
為什麼我不能在 Solidity 中循環映射?
好的,我們都知道在 Solidity 中循環映射是不可能的,而且我們都知道如何解決它:添加一個數組或計數器來跟踪映射中的索引。
但這個問題是關於為什麼會這樣。映射中允許哪些鍵的資訊應該在某個地方,因為它可以被檢索到。
如果在智能合約中允許這樣做在計算上不可行,為什麼 Web3 或類似的庫不能循環映射?他們能夠查詢完整的智能合約狀態,而不會產生 gas 費用。為什麼他們不能推斷出儲存在映射中的鍵列表?
請參閱下面的文章,以獲得關於如何保存映射以及為什麼我們不能迭代它們的非常好的解釋。
https://programtheblockchain.com/posts/2018/03/09/understanding-ethereum-smart-contract-storage/
TLDR-映射值保存在位置
hash(mappingKey, mappingStorageSlot)
。這種散列的結果不能事先知道/迭代。