Ist es möglich, eine Geth-Wallet über JSON RPC zu entsperren? [Duplikat]

Ich entwickle derzeit eine Anwendung auf Basis von Ethereums JSON RPC. Ich möchte die Brieftasche nach Bedarf entsperren und sperren können, ähnlich wie es Bitcoin tut. Es scheint jedoch, dass es derzeit nur möglich ist, eine Geth-Wallet mit der Konsole über personal.unlockAccount zu entsperren. Ich frage mich - ist das die einzige Möglichkeit, eine Geth-Brieftasche zu entsperren, oder gibt es eine Möglichkeit, dies auf andere Weise zu tun, idealerweise mit JSON RPC?

Antworten (2)

Es ist sicherer, die Go Ethereum - Management APIs - personal_sendTransaction API zu verwenden, um Ihr Konto zu entsperren UND gleichzeitig Ihre Transaktion zu senden:

personal_sendTransaction

Validieren Sie die angegebene Passphrase und übermitteln Sie die Transaktion.

Die Transaktion ist das gleiche Argument wie für eth_sendTransaction und enthält die Absenderadresse. Wenn die Passphrase zum Entschlüsseln des privaten Schlüssels von tx.from verwendet werden kann, wird die Transaktion verifiziert, signiert und an das Netzwerk gesendet. Das Konto wird im Knoten nicht global entsperrt und kann nicht in anderen RPC-Aufrufen verwendet werden.

Client    Method invocation
Console   personal.signAndSendTransaction(tx, passphrase)
RPC       {"method": "personal_sendTransaction", "params": [tx, string]}

Beachten Sie, dass Sie vor Geth 1.5 bitte personal_signAndSendTransaction verwenden, da dies der ursprüngliche Einführungsname war und erst später in die aktuelle endgültige Version umbenannt wurde.

Beispiele

var tx = {from: "0x391694e7e0b0cce554cb130d723a9d27458f9298", to: "0xafa3f8684e54059998bc3a7b0d2b0da075154d66", value: web3.toWei(1.23, "ether")}
undefined
personal.sendTransaction(tx, "passphrase")
0x8474441674cdd47b35b875fd1a530b800b51a5264b9975fb21129eeb8c18582f

Ihr Konto wird nur für die angegebene Transaktion freigeschaltet.

Sie müssen die persönliche API über die RPC-Schnittstelle mit der gethAPI-Option aktivieren:

geth --rpc --rpcapi "eth,net,web3,personal" [other option] console

Vielleicht möchten Sie die folgenden Links über die Sicherheit lesen, wenn Sie die persönliche API über RPC zulassen:



Update 21.07.2016 – Antwort auf Kommentar unten

Ich habe im gethGithub-Repository gesucht personal_sendTransactionund den Text nicht gefunden. Ich habe jedoch internal/web3ext/web3ext.go#L435-L440 gefunden :

new web3._extend.Method({
    name: 'signAndSendTransaction',
    call: 'personal_signAndSendTransaction',
    params: 2,
    inputFormatter: [web3._extend.formatters.inputTransactionFormatter, null]
})

Wie Sie sagten, scheint die Dokumentation veraltet zu sein.

Hmm, ich habe Ihre Methode ausprobiert und sie hat nicht funktioniert - ich habe einen Fehler von The method personal_sendTransaction does not exist/is not available. Ich habe es jedoch geschafft, personal_listAccountsund zu verwenden personal_unlockAccount- ich bin mir nicht ganz sicher, was dazu führen würde, dass diese funktionieren, aber nicht die sendTransaction ...
Hmm, es sieht so aus, als ob personal_signAndSendTransactiones funktioniert - das Management-APIs-Dokument scheint veraltet zu sein ...
Verwenden Sie einfach den API-Aufruf sendRawTransaction

Ja, mit dem API-Aufruf „personal_unlockAccount“.

{
    'jsonrpc':'2.0',
    'method':'personal_unlockAccount',
    'params':[address, password, seconds],
    'id':1
};