Go-Ethereum

geth 如何通過控制台訪問合約變數?

  • January 26, 2022

我使用 Mist 錢包只是為了顯示合約的內容。

Bellow,當我在控制台中執行時,您可以看到訪問合約函式 (submitUnits) 的程式碼和 LoadScript 的結果。

call_function.jscall_function.js

在最後一個註釋行中,可以看到我要列印的值(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不是常量,輸入參數為 type uint256。輸出類型被裁剪,但在這種情況下,因為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是合約中的第二個變數,並且變數從零開始編號。

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