Addresses
如何使用 getStorageAt 訪問多個值?
我有一個小型智能合約,它有 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);
。如果1
和2
不工作,數字在另一個索引。- 你的
samplecont.setnumbers()
交易可能都是在同一個區塊中開采的。嘗試在連續的區塊中間隔您的交易。