Go-Ethereum
geth 如何通過控制台訪問合約變數?
我使用 Mist 錢包只是為了顯示合約的內容。
Bellow,當我在控制台中執行時,您可以看到訪問合約函式 (submitUnits) 的程式碼和 LoadScript 的結果。
在最後一個註釋行中,可以看到我要列印的值(100)。
但是它總是返回這個十六進制數。如何獲得錢包螢幕截圖中提到的總單位?
合約程式碼是這樣的:
contract UCounter { mapping (address => uint256) public UnitsFrom; uint256 public TotalUnits; function submitUnits(uint256 Units) returns (uint ){ UnitsFrom[msg.sender] = Units; TotalUnits = Units; return TotalUnits; }
}
希望有人能幫忙。謝謝。
函式getData返回與函式簽名一起編碼的函式呼叫參數。
從您的 abi 的片段來看,
submitUnits
它不是常量,輸入參數為 typeuint256
。輸出類型被裁剪,但在這種情況下,因為submitUnits
是事務而不是呼叫,對於事務,我們可以恢復返回值。從文件中執行交易,我們必須做:
var txid = MyContractInstance.submitUnits.sendTransaction(parameter, { from: eth.accounts[3] }); console.log(txid);
你必須等到交易在區塊鏈中被探勘出來。
要讀取變數或呼叫常量方法,您必須呼叫
MyContractInstance.TotalUnits.call(function (value) { console.log(value); });
web3.eth.getStorageAt (address, position)
這
address
是您的智能合約的地址,並且position
是狀態變數位置,在您的情況下 position=1 因為TotalUnits
是合約中的第二個變數,並且變數從零開始編號。