¿Es posible desbloquear una billetera geth a través de JSON RPC? [duplicar]

Actualmente estoy desarrollando una aplicación sobre JSON RPC de Ethereum. Me gustaría poder desbloquear y bloquear la billetera según sea necesario, de forma similar a como lo hace Bitcoin. Sin embargo, parece que por el momento solo es posible desbloquear una billetera geth con la consola a través de personal.unlockAccount. Me pregunto: ¿es esa la única forma de desbloquear una billetera geth, o hay alguna forma de hacerlo por otros medios, idealmente con JSON RPC?

Respuestas (2)

Es más seguro usar Go Ethereum - API de administración - API personal_sendTransaction para desbloquear su cuenta Y enviar su transacción al mismo tiempo:

personal_sendTransaction

Valide la frase de contraseña dada y envíe la transacción.

La transacción es el mismo argumento que para eth_sendTransaction y contiene la dirección de origen. Si la frase de contraseña se puede usar para descifrar la clave privada que pertenece a tx.from, la transacción se verifica, se firma y se envía a la red. La cuenta no se desbloquea globalmente en el nodo y no se puede utilizar en otras llamadas RPC.

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

Tenga en cuenta que antes de Geth 1.5, use personal_signAndSendTransaction ya que ese era el nombre introductorio original y solo luego se cambió el nombre a la versión final actual.

Ejemplos

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

Su cuenta solo se desbloquea para la transacción especificada.

Deberá habilitar la API personal a través de la interfaz RPC utilizando la gethopción API:

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

Es posible que desee leer los siguientes enlaces sobre la seguridad de permitir la API personal a través de RPC:



Actualización 21/07/2016 - Respondiendo al comentario a continuación

Busqué en el gethrepositorio de github personal_sendTransactiony no pude encontrar el texto. Sin embargo, encontré internal/web3ext/web3ext.go#L435-L440 :

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

Como dijiste, la documentación parece desactualizada.

Hmm, probé tu método y no funcionó. Recibí un error de The method personal_sendTransaction does not exist/is not available. Sin embargo, me las arreglé para usar personal_listAccountsy personal_unlockAccount, no estoy del todo seguro de qué haría que funcionaran, pero no sendTransaction...
Hmm, parece que personal_signAndSendTransactionestá funcionando: el documento de API de administración parece estar desactualizado ...
Simplemente use la llamada api sendRawTransaction

Sí, usando la llamada API "personal_unlockAccount"

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