Wie verwalte ich das Entsperren von Konten in einem Test in Truffle

Ich habe einen Test, der eine Vertragsfunktion über verschiedene Konten ausübt. Wie schalte ich diese Accounts im Rahmen des Tests frei?

contract('MyContract', function (accounts) {

    it("should perform differently for different accounts", function (done) {

        var thisContract = MyContract.deployed();

        thisContract.addAccounts([accounts[1], accounts[2]], {from: accounts[0]} ).then(
            function (tx_id) {
              /* this works because I manual unlock acc 0 on geth */
                return thisContract.doSomething({from: accounts[0]});
            }).then(
            function (tx_id) {
              /* is there something here I can do to unlock acc 1? */
                return thisContract.doSomething({from: accounts[1]});
            }).then(
            function (tx_id) {
              /* then here... */
                return thisContract.doSomething({from: accounts[2]};
                done();
            }
        ).catch(done);

    });

});
Hast du das jemals herausgefunden? Ich verwende testrpc und muss mein Vertragskonto entsperren, um eine Funktion zu testen, die an eine Adresse sendet
Hallo @ElliottMcNary. Wenn Sie testrpc verwenden, müssen Sie Konten nicht entsperren. Auf einer Geth-Knotenkonsole tun Sie dies mit personal.newAccount("passphrase") und personal.unlockAccount(address, "password").

Antworten (1)

Sie können Konten nicht mit Ihrem Code entsperren. Es wäre ein Problem, wenn ein Code Ihre Konten entsperren kann.

Es scheint, als würden Sie Unit-Tests schreiben. Anstatt geth auszuführen, sollten Sie es vielleicht mit testrpc versuchen . Konten in testrpc müssen vor der Verwendung nicht entsperrt werden.

Ich habe TestRPC verwendet, bin aber auf Probleme gestoßen, weil es das Verhalten eines Knotens selbst nicht wirklich repliziert :-) Huhn und Ei.
Sie können auch versuchen, mehrere Konten auf Geth zu entsperren, bevor Sie Ihre Komponententests ausführen.
Hallo uzyn, da Sie nicht jemanden haben können, der Ihr Konto manuell entsperrt, bevor Sie mit dem Smartcontract kommunizieren, wie funktioniert die aktuelle Dapps-Plattform, wenn Sie Konten nicht mit Ihrem Code entsperren können? Vielen Dank !
@fabdarice Dafür gibt es zwei Möglichkeiten: 1. Konten am Knoten entsperren (geth/parity); oder 2. signieren Sie Ihre tx mit Ihrem Code und senden Sie nur die signierte tx an den Knoten.
könnten Sie vielleicht beide Lösungen ein wenig erweitern? Tut mir leid, ich bin ziemlich neu auf diesem Gebiet. Ich persönlich interessiere mich für den Fall, dass jeder Benutzer Ihre Plattform nutzen kann, um eine Transaktion durchzuführen. Das würde ihren privaten Schlüssel und ihr Passwort erfordern, um ihr Konto zu entsperren, aber ich möchte nicht, dass sie sich dabei unsicher fühlen.
Wenn es sich um den privaten Schlüssel des Benutzers handelt, muss es Methode 2 sein, wie ich es beschrieben habe. Sie können sich MyEtherWallet ansehen, ihre Implementierung ist genau das.