Solidity

是否可以通過智能合約找出動態數組大小?

  • August 31, 2019

這個問題已經回答了,為了以程式方式獲取數組的大小,應該定義一個 getter。

但是,假設沒有 getter,有沒有辦法以任何其他方式找出動態數組的大小?例如查看字節碼。

字節碼僅包含原始合約程式碼。所有後續數據都在交易中,我假設您的意思是在合約部署後修改的數組的大小。

所以我已經給你提示了。僅在建構子(部署時)和事務中修改數組。因此,您“只”需要查看建構子程式碼並完成交易。這基本上是節點已經在做的事情(至少是更完整的節點)——它們執行所有事務以獲取新狀態。

此外,由於始終知道目前狀態,您應該能夠以某種方式找出數組中有多少條目,但我不確定如何做到這一點。

上述方法都不是容易的(至少如果手工完成) - 可能需要一些逆向工程。

當然,這是可能的。動態數組的大小與數組元素一起儲存在合約的儲存中。儲存中儲存數組大小的特定地址取決於數組的定義方式。有關詳細資訊,請參閱此頁面。您可以使用此功能讀取智能合約的儲存。

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