Solidity

需要幫助理解——web3.eth.getStorageAt

  • April 4, 2017

在此處輸入圖像描述

假設我的契約中有三個狀態變數

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 計算來查找值或數組數據的起始位置。這些起始位置始終是滿棧槽。

(堆棧應該儲存在文件中。)

相關:如何獲取儲存索引/鍵?

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