Tengo un servicio donde los usuarios pueden comprar mi producto. Además de pagar con tarjeta, quiero poder permitir que los usuarios paguen en ETH
. Creo que generará direcciones correctamente para cada usuario para que sea posible seguir el saldo. En el servidor que he ejecutado geth
, los usuarios obtienen sus direcciones a través de la rpc
solicitud. Pero si alguien tiene un servidor pirateado, puede retirar todas las cantidades. ¿Cómo puedo proporcionar una billetera segura?
Cualquier sugerencia sería muy apreciada.
Puedes usar carteras HD . Podrá almacenar sus palabras semilla de forma segura fuera de línea, poner la clave pública maestra en un servidor y generar direcciones de recepción basadas en ella.
Así es como puede generar direcciones basadas en una clave pública maestra que corresponde a una ruta de derivación base:
const wallet = require('ethereumjs-wallet')
const hdkey = require('ethereumjs-wallet/hdkey')
const create_addresses = async (from, to) => {
const addresses = [];
const master_public_key = process.env.MASTER_PUBLIC_KEY;
const hdk = hdkey.fromExtendedKey(master_public_key);
from = from || 0;
to = to || 100;
for (let i = from; i <= to; i++){
const child = hdk.deriveChild(i);
const w = wallet.fromExtendedPublicKey( child.publicExtendedKey() );
const addr = {};
addr[w.getAddressString()] = `${process.env.BASE_DERIVATION_PATH}/${i}`;
addresses.push(addr);
};
return addresses;
}
Suponiendo que el valor encontrado en process.env.MASTER_PUBLIC_KEY
corresponde a la ruta de derivación m/44'/60'/0
, la función anterior, cuando se llama sin ningún parámetro, generará direcciones de m/44'/60'/0/0
am/44'/60'/0/100
Actualizar: obtener la clave pública maestra:
const get_mpk = ( seed, bdp ) => {
const seed = bip39.mnemonicToSeed(mnemonic)
const hdk = hdkey.fromMasterSeed(seed);
const base_derivation_path = bdp || "m/44'/60'/0'/0";
const base_derived = hdk.derivePath(base_derivation_path);
const master_public_key = base_derived.publicExtendedKey();
return master_public_key;
}
Yur Gasparyan
Tudor Constantino
MASTER_PUBLIC_KEY
palabras iniciales y la ruta de derivación. Desafortunadamente, no tengo el código para crear y firmar transacciones en un solo lugar (estamos creando el tx en línea y lo firmamos fuera de línea) y no tengo tiempo para armarlo ahora.Yur Gasparyan