Solidity
需要幫助理解——web3.eth.getStorageAt
假設我的契約中有三個狀態變數
contract A { uint private x = 255; uint[] y; uint z; }
據我了解,x 將具有索引 0、y 索引 1 和 z 索引 2?就這麼簡單嗎?
有多少個索引?
有特殊指標嗎?
index 是指向一個保存一個變數的儲存單元(不管它的大小)還是指向一個有限制的單元(比如 32 個字節)?
我只是想在合約地址訪問私有狀態變數,但不知道如何。我相信它是通過這個app方法完成的。謝謝!
索引只會檢索一個 32 字節的儲存槽。
y
是一個動態大小的數組,所以它不會在索引 1 處。您要查找的資訊是:
https://solidity.readthedocs.io/en/latest/miscellaneous.html#layout-of-state-variables-in-storage
靜態大小的變數(除了映射和動態大小的數組類型之外的所有變數)從位置 0 開始在儲存中連續佈局。
…
由於它們不可預測的大小,映射和動態大小的數組類型使用 sha3 計算來查找值或數組數據的起始位置。這些起始位置始終是滿棧槽。
(堆棧應該儲存在文件中。)
相關:如何獲取儲存索引/鍵?