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?
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 geth
opció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 geth
repositorio de github personal_sendTransaction
y 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.
Sí, usando la llamada API "personal_unlockAccount"
{
'jsonrpc':'2.0',
'method':'personal_unlockAccount',
'params':[address, password, seconds],
'id':1
};
elpiachu
The method personal_sendTransaction does not exist/is not available
. Sin embargo, me las arreglé para usarpersonal_listAccounts
ypersonal_unlockAccount
, no estoy del todo seguro de qué haría que funcionaran, pero no sendTransaction...elpiachu
personal_signAndSendTransaction
está funcionando: el documento de API de administración parece estar desactualizado ...Mate