¿Cómo puedo hacer una nueva cuenta por JSON-RPC?

Me gustaría crear una nueva cuenta por JSON-RPC. Revisé la wiki de Ethereum , sin embargo, no pude encontrar cómo hacerlo.

He encontrado cuentas de llamadas existentes, pero no es lo que quiero. eth_accounts

¿Podrías decirme cómo hacer esto?

Respuestas (3)

Primero, una nota sobre la seguridad:

No debe hacer que la personalAPI esté disponible a través de RPC

Si está en una máquina local confiable, debe usar IPC en lugar de RPC. De lo contrario, cualquier persona que pueda conectarse a su nodo a través de RPC puede intentar forzar sus contraseñas por fuerza bruta y robar su Ether.

Todas las API administrativas están disponibles de forma predeterminada sobre IPC, por lo que no es necesario usar ninguna bandera con geth

Para conectarse a través de IPC:

Instalar mi biblioteca: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);
    }
});

Reemplace la hostvariable con la ruta adecuada para su sistema.

Nota: Todas las solicitudes a través de IPC deben ser asíncronas.


Algunas alternativas:

No sé por qué desea crear nuevas cuentas a través de web3, pero probablemente no sea la mejor manera de hacer lo que está tratando de lograr. Es mucho más seguro y más modular usar un proveedor web3 enganchado con una billetera ligera del lado del cliente o simplemente usar el navegador Mist que maneja todas las cuentas por usted.

Ahora la técnica (no hagas esto)

Debe habilitar la personalAPI sobre RPC. Haz esto comenzando geth con

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

Entonces puede usar el personal_newAccountmétodo a través de RPC. No está implementado en web3.js, por lo que debe emitir manualmente la solicitud RPC. Por ejemplo con curl:

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

crea una nueva cuenta con contraseña passwordy devuelve la dirección:

{"id":1,"jsonrpc":"2.0","result":"0x05ca0ddf7e7506672f745b2b567f1d33b7b55f4f"}Hay alguna documentación básica.

Alternativamente: use el web3.js extendido no oficial

  • esto le permite usar las API y a través personalde una interfaz web3.js estándar.adminminer
Hmm, en realidad parece que la biblioteca web3.js no implementa personalfunciones, incluso sobre IPC. Dame un minuto para hackear algo juntos.
@toshikaseda Bifurqué la biblioteca web3_extended para permitir conexiones IPC. github.com/tjade273/web3_extended
¡Gracias, lo comprobaré!
Ahora puede instalar connpm install web3_ipc
@TjadenHess Mencionaste "/home/user/.ethereum/geth.ipc". ¿Debo hacer geth.ipc por mí mismo? ¿O todavía existe?
Ya debería existir en cualquier directorio de datos que esté utilizando
@TjadenHess Me gustaría llamar a geth desde ruby, no desde javascript. ¿Podría decirme cómo puedo hacer eso, si no puedo usar JSON-RPC?
Bueno, creé un PR para fusionar web3_ipc en web3_extended, pero no hubo respuesta. Realmente no se supone que estas herramientas estén expuestas por web3, así que no sé si fusionarlas sería inteligente
¿Por qué no fusionarse con web3 e incluir una advertencia?
@TjadenHess, ¿cómo puedo desbloquear una cuenta usando una clave privada en lugar de una contraseña en json rpc?

En ethereum-php/ethereum.php agregar

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

y llámalo para crear una nueva cuenta

btelle/ethereum-php está irremediablemente desactualizado.

Por lo que parece, creo que estás usando testrpc de ganache para hacer esto. Si está utilizando Python para hacer esto. Es muy simple. Primero necesitas instalar web3. Escriba lo siguiente en la terminal

pip install web3

(asegúrese de estar usando Python 3.5 o superior). Ahora abra la consola de Python en la terminal escribiendo pythonen la terminal. Una vez que esté en la consola de Python, escriba

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

Aquí '1234' es el código de acceso que se requiere para crear la cuenta de ethereum. Si no proporciona el código de acceso, se le pedirá que lo haga. Si no está utilizando testrpc o ganache, debe cambiar HTTPProvider a otros proveedores como se indica aquí .