Wie löst man autonom Transaktionen von Node.js aus?

Ich habe eine JS-Datei, die auf NodeJS auf mehreren Geräten läuft, die miteinander interagieren und versuchen, Daten in die Blockchain zu schreiben und Transaktionen zu senden. Das Problem ist, dass ich jedes Mal das Passwort manuell eingeben muss. Ich habe personal.unlockAccount in der Client-Konsole verwendet, aber das löst die Situation nicht wirklich ...

Ich versuche, einen Mikro-Strommarkt zu entwickeln, bei dem alle 15 Minuten mehrere autonome Transaktionen gesendet werden, ich kann nicht die ganze Zeit vor dem Bildschirm bleiben.

Gibt es eine Möglichkeit, das zu erreichen, was ich tun möchte?

Danke im Voraus

Bei der Parität bin ich mir nicht sicher, aber Go-Ethereu unlockAccountnimmt ein zweites Argument, nämlich die Zeit, wie lange das Konto entsperrt bleibt.

Antworten (2)

Wenn Sie die personalAPI auf Ihrem Knoten aktiviert haben, können Sie mit web3 genau wie über die Konsole damit interagieren.

Wenn ich etwas automatisiere, konfiguriere ich den Dienst im Allgemeinen so, dass er als isolierter Benutzer auf meinem System ausgeführt wird. Dann lege ich das Passwort für das Konto, mit dem der Benutzer interagiert, in eine Datei im Home-Verzeichnis des Benutzers (oder an einem anderen Ort) und ändere die Berechtigungen so, dass sie nur von diesem Benutzer gelesen werden können.

Dann verwende ich einen Wrapper wie den folgenden, damit ich ein Konto einfach entsperren, eine Transaktion (oder eine Reihe von Transaktionen) senden und das Konto dann wieder sperren kann:

function whileUnlocked(web3, account, pwfile, task) {
  return readFile(pwfile, 'utf8')
    .then(function(pw) {
      return web3.personal.unlockAccount(account, pw.trim())
        .then(task)
        .then(function() {
          return web3.personal.lockAccount(account)
        });
    });
}

Beachten Sie, dass dies eine modifizierte Version von web3 erfordert, die für die Verwendung von Promises erweitert wurde, da dies diesen Ablauf vereinfacht.

Dies könnte wahrscheinlich verbessert werden, indem das letzte thena gesetzt finallywird, um das Konto immer zu sperren, unabhängig davon, ob die Aufgabe fehlschlägt oder nicht.

Die wichtigen Teile für Ihre Verwendung: Sie möchten anrufen web3.personal.unlockAccount, einen Rückruf übergeben, der alles tut, was Sie tun müssen, während die Transaktion entsperrt ist, und dann anrufen, web3.personal.lockAccountwenn Sie fertig sind.

Wir haben im Pass den Hooked-Web3-Provider von ConsenSys verwendet (Er ist jetzt veraltet, sie verweisen auf ein ähnliches Projekt https://github.com/ethjs/ethjs-provider-signer ). Auf diese Weise haben wir einen Dienst, der Transaktionen signiert, ohne den privaten Schlüssel preiszugeben, zum Beispiel können wir einen Hardwareschlüssel haben.

Unser Problem ist, dass Ihr Knoten jede Transaktion personal.unlockAccountsignieren kann, während Ihr Konto entsperrt ist. Sie haben also ein winziges Zeitfenster, in dem Ihr Knoten von einem böswilligen Dritten angegriffen werden kann.