Addresses

如何使用 getStorageAt 訪問多個值?

  • April 4, 2017

我有一個小型智能合約,它有 2 個功能,一個設置 3 個數字,另一個功能返回這 3 個數字。

返回(a,b,c)

samplecont.setnumbers(100,250,250)
samplecont.getnumbers()
[100,250,250]
samplecont.setnumbers(101,260,260)
[101,260,260]
samplecont.setnumbers(102,270,270)
[102,270,270]

我正在嘗試使用訪問這 3 個變數的過去值getStorageAt。在閱讀了有關此主題的其他回復後編寫了以下程式碼: mycontractaddress如果已開採合約,則包含地址。


uint maxBlocks = 50;
uint startBlock = eth.blockNumber;
for (var i = 0; i <maxBlocks; i ++) {
目前 = web3.eth.getStorageAt(mycontractaddress, 0, startBlock-i);

blockDate = new Date(web3.eth.getBlock(startBlock-i).timestamp*1000);

console.log("Block #" + (startBlock-i) + " Timestamp:" + blockDate.toString()
+ "值:" + web3.toDecimal(current));

}

但是,輸出僅顯示 3 個數字中的第一個:

塊 #7547 時間戳:2016 年 9 月 7 日,星期三 14:06:55 IST 值:102
塊 #7546 時間戳:2016 年 9 月 7 日星期三 14:06:50 IST 值:102
塊 #7545 時間戳:2016 年 9 月 7 日,星期三 14:06:47 IST 值:102
塊 #7544 時間戳:2016 年 9 月 7 日,星期三 14:06:45 IST 值:102
塊 #7543 時間戳:2016 年 9 月 7 日星期三 14:06:17 IST 值:102
塊 #7542 時間戳:2016 年 9 月 7 日星期三 14:06:14 IST 值:102

我究竟做錯了什麼?感謝任何指針。

我看到兩件事:

  • 要獲取其他值,您需要查看記憶體中的另一個索引。像這樣web3.eth.getStorageAt(mycontractaddress, 1, startBlock-i);web3.eth.getStorageAt(mycontractaddress, 2, startBlock-i);。如果12不工作,數字在另一個索引。
  • 你的samplecont.setnumbers()交易可能都是在同一個區塊中開采的。嘗試在連續的區塊中間隔您的交易。

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