¿Web3.js tiene la funcionalidad para crear nuevas cuentas y desbloquear una cuenta por un período de tiempo para una serie de transacciones?

Quiero crear nuevas cuentas a través de mi interfaz web Dapp y desbloquear una cuenta específica para que se puedan procesar las transacciones. No lo vi en la documentación de web3.js, así que me pregunto si eso está en la hoja de ruta de web3.js.

Respuestas (4)

Respuesta actualizada el 4 de enero de 2018

Web3.js tiene soporte completo para la administración de cuentas a partir de v1.0.0, incluida la creación de una nueva cuenta . v1.0.0 todavía está en versión beta, pero está cerca de la producción y ya es la versión lanzada a través de npm. Gracias Thom Ives por señalar esto.

Ejemplo completo procedente de la documentación de web3.js:

web3.eth.accounts.create();
> {
    address: "0xb8CE9ab6943e0eCED004cDe8e3bBed6568B2Fa01",
    privateKey: "0x348ce564d427a3311b6536bbcff9390d69395b06ed6c486954e971d960fe8709",
    signTransaction: function(tx){...},
    sign: function(data){...},
    encrypt: function(password){...}
}

web3.eth.accounts.create('2435@#@#@±±±±!!!!678543213456764321§34567543213456785432134567');
> {
    address: "0xF2CD2AA0c7926743B1D4310b2BC984a0a453c3d4",
    privateKey: "0xd7325de5c2c1cf0009fac77d3d04a9c004b038883446b065871bc3e831dcd098",
    signTransaction: function(tx){...},
    sign: function(data){...},
    encrypt: function(password){...}
}

web3.eth.accounts.create(web3.utils.randomHex(32));
> {
    address: "0xe78150FaCD36E8EB00291e251424a0515AA1FF05",
    privateKey: "0xcc505ee6067fba3f6fc2050643379e190e087aeffe5d958ab9f2f3ed3800fa4e",
    signTransaction: function(tx){...},
    sign: function(data){...},
    encrypt: function(password){...}
}

Respuesta anterior de 2016

Web3.js no tiene esta capacidad incorporada y probablemente nunca la tendrá. Sin embargo, existen soluciones personalizadas como https://github.com/SilentCicero/ethereumjs-accounts/ .

ethereumjs-accountsle permite crear cuentas en el navegador, luego usar estas direcciones para web3.jstransacciones. Las claves privadas se guardan localStoragey se pueden cifrar. Asegúrese de leer las advertencias de seguridad y comprender lo que está haciendo.

https://metamask.io/ es un enfoque más amplio para hacer que las DApps sean accesibles a través de un navegador normal. También contiene administración de identidades (por ejemplo, cuentas).

En mi opinión, las soluciones como ethereumjs-accountsMetamask pueden ser una buena vía de acceso para hacer que las DApps sean accesibles para una amplia audiencia, para transacciones de bajo valor o incluso solo para acceso de solo lectura a las DApps.

o la comunidad en general, mucho ha cambiado desde la respuesta de Aron. ¿Hay nuevas formas de responder a esta pregunta?
web3js 0.20.x permite crear una nueva cuenta usando la web3.personal.newAccountfunción.

Es poco probable que se agregue funcionalidad relacionada con las cuentas a web3.js.

Mist es un navegador diseñado para ejecutar DApps y administrar cuentas. Tiene lo mist.requestAccountque parece ser la API esperada que deberían usar las DApps.

Probablemente la razón principal por la que Mist y no web3.js es que un navegador en sí mismo puede proporcionar más seguridad que Javascript. Por ejemplo, un cuadro de diálogo modal en Mist que solicita al usuario su cuenta y contraseña es más difícil de falsificar, manipular o interceptar que un cuadro de diálogo HTML/CSS/JS.

En este momento, la niebla requiere que ejecutes un nodo completo. Pero eso no es demasiado fácil de usar, teniendo en cuenta que la cadena de bloques ya tiene 10 GB. Si quiero desarrollar algunas aplicaciones de usuario final, necesitamos encontrar una manera para que los usuarios eviten tener que usar niebla, o hacer que la niebla consuma menos recursos, ¿no cree?
Una vez que finalice el protocolo LES, Mist podrá funcionar sin descargar la cadena de bloques completa.

Después de solicitar una actualización en mis comentarios a la respuesta de Aron, hice una búsqueda usando una modificación de este título y descubrí que web3.js ahora, de hecho, le permite crear nuevas cuentas. VER AQUÍ . Al leer estos documentos web3.js en la creación, parece crear cuentas de una manera tan segura como MetaMask.

De hecho, parece una funcionalidad completa de administración de cuentas dentro de web3.js. Feliz de haberse equivocado en esto :)
@AronVanAmmers, creo que cuando respondiste originalmente no estaba disponible. Sin embargo, aprender a administrar otras direcciones junto con sus claves privadas sin conocer sus claves privadas requerirá que aprendamos y compartamos un nuevo conjunto de mejores prácticas.

Puedes consultar ethers.js

Ethers.js tiene una administración completa de billetera, separada de geth (como debería ser, ya que es solo criptografía). Luego puede adjuntar un proveedor a su billetera (web3 lo hace básicamente al revés). Luego adjunta esta billetera + proveedor al artefacto del contrato y tiene una instancia de contrato a la que puede llamar.