Wie kann ich ein neues Konto mit JSON-RPC erstellen?

Ich möchte ein neues Konto über JSON-RPC erstellen. Ich habe das Wiki von Ethereum überprüft , konnte jedoch nicht herausfinden, wie das geht.

Ich habe vorhandene Anrufkonten gefunden, aber das ist nicht das, was ich will. eth_accounts

Können Sie mir sagen, wie das geht?

Antworten (3)

Zunächst ein Hinweis zur Sicherheit:

Sie sollten die personalAPI nicht über RPC verfügbar machen

Wenn Sie sich auf einem lokalen, vertrauenswürdigen Computer befinden, sollten Sie IPC anstelle von RPC verwenden. Andernfalls kann jeder, der sich über RPC mit Ihrem Knoten verbinden kann, versuchen, Ihre Passwörter brutal zu erzwingen und Ihr Ether zu stehlen.

Alle administrativen APIs sind standardmäßig über IPC verfügbar, sodass keine Flags mit geth verwendet werden müssen

So verbinden Sie sich über IPC:

Installieren Sie meine Bibliothek:npm install web3_extended

var web3_extended = require('web3_extended');

var options = {
  host: '/home/user/.ethereum/geth.ipc',
  ipc:true,
  personal: true, 
  admin: false,
  debug: false
};

var web3 = web3_extended.create(options);

web3.personal.newAccount("password",function(error,result){
    if(!error){
        console.log(result);
    }
});

Ersetzen Sie die hostVariable durch den richtigen Pfad für Ihr System.

Hinweis: Alle Anfragen über IPC müssen asynchron sein.


Einige Alternativen:

Ich weiß nicht, warum Sie neue Konten über web3 erstellen möchten, aber es ist wahrscheinlich nicht der beste Weg, um das zu erreichen, was Sie erreichen möchten. Es ist viel sicherer und modularer, einen Hooked-Web3-Anbieter mit einer clientseitigen Light Wallet zu verwenden oder einfach den Mist-Browser zu verwenden , der alle Konten für Sie verwaltet.

Nun zur Technik (tu das nicht)

Sie müssen die personalAPI über RPC aktivieren. Tun Sie dies, indem Sie geth mit starten

geth --rpc --rpcapi "db,eth,net,web3,personal"

Dann können Sie die personal_newAccountMethode über RPC verwenden. Es ist nicht in web3.js implementiert, daher müssen Sie die RPC-Anforderung manuell ausgeben. Zum Beispiel mit curl:

curl -X POST --data '{"jsonrpc":"2.0","method":"personal_newAccount","params":["password"],"id":1}' localhost:8545

erstellt ein neues Konto mit Passwort passwordund gibt die Adresse zurück:

{"id":1,"jsonrpc":"2.0","result":"0x05ca0ddf7e7506672f745b2b567f1d33b7b55f4f"}Es gibt eine grundlegende Dokumentation

Alternativ: Verwenden Sie die inoffizielle erweiterte web3.js

  • Dadurch können Sie die APIs personal, adminund minerüber eine standardmäßige web3.js-Schnittstelle verwenden.
Hmm, eigentlich sieht es so aus, als ob die web3.js-Bibliothek keine personalFunktionen implementiert, auch nicht über IPC. Gib mir eine Minute, um etwas zusammenzuhacken.
@toshikaseda Ich habe die web3_extended-Bibliothek gegabelt, um IPC-Verbindungen zuzulassen. github.com/tjade273/web3_extended
Thx, werde ich prüfen!
Sie können jetzt mit installierennpm install web3_ipc
@TjadenHess Du hast "/home/user/.ethereum/geth.ipc" erwähnt. Soll ich geth.ipc selbst erstellen? Oder ist es noch vorhanden?
Es sollte bereits in dem von Ihnen verwendeten Datenverzeichnis vorhanden sein
@TjadenHess Ich möchte Geth von Ruby anrufen, nicht von Javascript. Können Sie mir sagen, wie ich das machen kann, wenn ich JSON-RPC nicht verwenden kann?
Nun, ich habe eine PR erstellt, um web3_ipc in web3_extended zusammenzuführen, aber es kam keine Antwort. Diese Tools sollten wirklich nicht von web3 verfügbar gemacht werden, also wäre es klug, sie zusammenzuführen
Warum nicht mit web3 zusammenführen und eine Warnung einfügen?
@TjadenHess wie kann ich das Konto mit dem privaten Schlüssel anstelle des Passworts in json rpc entsperren

In ethereum-php/ethereum.php hinzufügen

function personal_newAccount($passphase) { return $this->ether_request(__FUNCTION__, array($passphase)); }

und rufen Sie es auf, um ein neues Konto zu erstellen

btelle/ethereum-php ist hoffnungslos veraltet.

So wie es aussieht, denke ich, dass Sie Testrpc von Ganache verwenden, um dies zu tun. Wenn Sie dafür Python verwenden. Es ist sehr einfach. Zuerst müssen Sie web3 installieren. Geben Sie im Terminal Folgendes ein

pip install web3

(Stellen Sie sicher, dass Sie Python 3.5 oder höher verwenden.) Öffnen Sie nun die Python-Konsole im Terminal, indem Sie im Terminal eingeben python. Sobald Sie sich in der Python-Konsole befinden, geben Sie ein

from web3 import Web3
web3 = Web3(Web3.HTTPProvider("http://127.0.0.1:8545"))
web3.newAccount('1234')

Hier ist „1234“ der Passcode, der zum Erstellen des Ethereum-Kontos erforderlich ist. Wenn Sie den Passcode nicht angeben, werden Sie dazu aufgefordert. Wenn Sie testrpc oder ganache nicht verwenden, sollten Sie den HTTPProvider wie hier beschrieben auf einige andere Anbieter ändern