¿Qué es una billetera HD para Ether y cómo crear una usando node.js?

Conozco los conceptos básicos de blockchain y cómo usar geth. Sin embargo, tengo curiosidad por saber cómo crear una billetera usando nodejs. Lo que entiendo es que puede crear una cuenta usando la consola geth (red privada) para trabajar y cuando pase el comando, personal.listWalletshará esto:Salida de personal.listWallets en la consola geth

¿Qué es la billetera HD y cómo crear una usando node.js?

Respuestas (2)

También puede usar la biblioteca HDWalletProvider muy conveniente del equipo de Truffle

const HDWalletProvider = require("truffle-hdwallet-provider");
const Web3 = require('web3');

var mnemonic = "opinion destroy betray ..."; // 12 word mnemonic
var provider = new HDWalletProvider(mnemonic, "http://localhost:8545");

const web3 = new Web3(provider);

Las billeteras HD pueden ser convenientes, ya que puedes generar una cantidad infinita de cuentas deterministas, pero nunca pierdas estas 12 palabras o perderás todo acceso para usar tus firmas y ether.

También hay una advertencia sobre la selección de palabras. No debe elegir palabras arbitrarias, sino palabras de una bolsa de palabras que asegure la aleatorización. Si encuentro un enlace, lo publicaré aquí.
Aquí está el estándar de referencia BIP39. Necesitará un PRNG para generar los 128-256 bits de entropía, pero le sugiero que no haga rodar el suyo si es posible. github.com/bitcoin/bips/blob/master/…

Las carteras HD se refieren a carteras deterministas jerárquicas . Son monederos que, desde un root, pueden generar múltiples claves privadas “child” de forma determinista. Solo necesita recordar la "ruta" de la clave secundaria.

Por ejemplo, las billeteras de hardware las usan: desde una sola raíz puede generar claves separadas para Bitcoin (con ruta m/44'/0'/0'/0) y Ethereum (ruta m/44'/60'/0'/0).

Una biblioteca de JavaScript que admite billeteras HD ethereumjs-wallet .

var hdkey = require("ethereumjs-wallet/hdkey")
var bip39 = require("bip39");

// You can generate a mnemonic seed with bip39 library
var mnemonic = "seed sock milk ...";
var path = "m/44'/60'/0'/0/0";

var hdwallet = hdkey.fromMasterSeed(bip39.mnemonicToSeed(mnemonic));
var wallet = hdwallet.derivePath(path).getWallet();
var address = "0x" + wallet.getAddress().toString("hex");

console.log(address);
¿Hay alguna documentación de eso? ¿Cómo agregar más cuentas, obtener la clave privada/contraseña de la cuenta, recuperar la billetera de la semilla, etc.?
@PrashantPrabhakarSingh Ethereumjs-wallet tiene una documentación decente y tiene una prueba unitaria para billeteras hdkey pero, por lo demás, el código fuente es bueno como documentación.
@Ismael, ¿cómo podríamos agregar esto con Geth?
@ShivamNema Una vez que haya creado la billetera, puede exportar la clave privada e importarla en geth. Pero es mejor si dices qué estás tratando de lograr al final, es decir, ¿por qué quieres usar una billetera HD? Se usan cuando se necesita una gran cantidad de direcciones y geth no tiene soporte para las propiedades especiales de las billeteras hd.