Wie rufe ich eine Vertragsfunktion von einem erforderlichen Konto aus auf?

Ich benutze Geth auf einer privaten Kette. Ich habe eine Solidity-Funktion für einen Vertrag wie folgt:

function check()  public constant returns (string) {

    // if caller is not who it should be don't do anything
    if ( msg.sender != expectedSender )
                return;

    // if caller is expected return some information
    return someInformation;

}

Ich habe den Vertrag bereitgestellt und instanziiert und rufe die Methode an der Geth-Konsole wie folgt auf:

myContract.check();

Ich bekomme eine leere Zeichenfolge "", zurück, wenn ich diesen Aufruf von der Geth-Konsole aus tätige. Ich habe ein Konto mit personal.unlockAccount() entsperrt, indem ich das für „expectedSender“ erwartete Konto verwendet habe, aber der msg.sender-Test funktioniert immer noch nicht.

Sollte das funktioniert haben? Wie stelle ich sicher, dass ich diese Funktion im Kontext des richtigen Kontos aufrufe?

Antworten (2)

Sie können den eth.defaultAccount festlegen, für den der Vertrag ausgeführt werden soll.

Ihr erwarteter Absender ist für uns immer noch nicht sichtbar. Also, wir wissen nicht, was das ist, aber in den meisten Fällen, wenn es als Eigentümer des Vertrags verwendet wird, dann ist es das Konto, das es veröffentlicht hat. Überprüfen Sie, welches Konto es veröffentlicht hat. Sie können das Transaktionsprotokoll von Ihrer Konsole aus anzeigen.

Sie können die Anzahl der Konten überprüfen, die Sie haben

personal.listAccounts;

Und sehen Sie, welche der Adressen aus dem Transaktionsprotokoll übereinstimmt

Sie können verwenden myContract.call.check();. Dies wird es jedoch nur auf Ihrem Knoten aufrufen und es wird nicht abgebaut. Für die Ausführung auf der Blockchain müssen Sie eine Transaktion an die Aufruffunktion senden