Wie kann geth über die Konsole auf Vertragsvariablen zugreifen?

Ich verwende die Mist-Brieftasche nur, um den Inhalt des Vertrags anzuzeigen.
Unten sehen Sie den Code für den Zugriff auf die Vertragsfunktion (submitUnits) und das Ergebnis des LoadScript, wenn ich es in der Konsole ausführe.

call_function.jscall_function.js
In der letzten kommentierten Zeile sehen Sie den Wert, den ich drucken möchte (100).

Geben Sie hier die Bildbeschreibung einMist Brieftasche

Geben Sie hier die Bildbeschreibung ein

Es gibt jedoch immer diese Hex-Zahl zurück. Wie kann ich die Gesamteinheiten erhalten, die im Wallet-Screenshot erwähnt werden?

Der Code des Vertrages lautet:

contract UCounter {
mapping (address => uint256) public UnitsFrom;
uint256 public TotalUnits;

function submitUnits(uint256 Units) returns (uint ){
    UnitsFrom[msg.sender] = Units;
    TotalUnits = Units;
    return TotalUnits;
}

}

Hoffe jemand konnte helfen. Danke.

0x2c1e75ec... ist die Funktion, die Sie senden, nicht das Ergebnis der Funktion
Bitte geben Sie den Code des Vertrages an, sonst ist es schwer zu debuggen. zB: ist die Funktion, die Sie aufrufen constant?
@ValidityLabs-Sebastian Ich aktualisiere den Code im Vertragscode. Danke.

Antworten (2)

Die Funktion getData gibt Funktionsaufrufparameter zurück, die zusammen mit der Funktionssignatur codiert sind.

Aus dem Snippet deines abi geht hervor, submitUnitsdass es keinen konstanten Eingabeparameter vom Typ hat uint256. Der Ausgabetyp ist abgeschnitten, aber in diesem Fall submitUnitsist da eine Transaktion kein Aufruf , und für die Transaktion können wir den Rückgabewert wiederherstellen.

Von der Dokumentation zur Ausführung einer Transaktion müssen wir Folgendes tun:

var txid = MyContractInstance.submitUnits.sendTransaction(parameter, { from: eth.accounts[3] });
console.log(txid);

Und Sie müssen warten, bis die Transaktion in der Blockchain geschürft wird.

Um eine Variable zu lesen oder eine konstante Methode aufzurufen, müssen Sie einen Aufruf tätigen

MyContractInstance.TotalUnits.call(function (value) {
    console.log(value);
});
Ja, ich habe @Ismael verstanden, aber mit der Transaktion kann ich immer Werte an meinen Vertrag senden. Was ich suche, ist über die Geth-Konsole auf die Variable TotalUnits zuzugreifen. Wie kann ich den Wert der Transaktion zurückgeben? Ich habe den Beitrag mit dem Wallet-Vertrag aktualisiert.
web3.eth.getStorageAt (address, position)

Hier addressist die Adresse Ihres Smart Contracts und positiondie Position der Zustandsvariablen, in Ihrem Fall Position = 1 TotalUnits, da dies die zweite Variable in Ihrem Vertrag ist und die Variablen beginnend bei Null nummeriert sind.