¿Reenviador de billetera Bitcoin HD sin depender de un tercero?

Quiero configurar un servicio API REST que haga 3 cosas simples.

  1. Pídale que genere una nueva dirección (idealmente desde un árbol de claves BIP32 xpub)
  2. Notificar a mi aplicación de servidor cuando ocurre un depósito y confirmación X.
  3. Una vez que se confirme el depósito, reenvíe los fondos a otra dirección e invoque un script en PHP o node.

Originalmente iba por la bitcoind walletnotifyruta, pero surgieron algunos problemas (a saber, no hay soporte HD, la escalabilidad de tener 10000 de direcciones monitoreadas en un bitcoind aparentemente es una mala idea, ¿es esto cierto?).

Por lo tanto, he estado configurando Ubuntu como un servidor y mirando bitcore + bitcoindcon node.js para resolver esto que es doloroso en v14.04 por alguna razón... ¿estoy ladrando al árbol equivocado y/o hay un enfoque más fácil? No puedo creer que soy el único que necesita esto, así que siento que me estoy perdiendo un truco obvio aquí, ya que es como sacar un diente.

No quiero depender de un servidor de terceros porque si desaparecieran, no quiero arriesgarme a que mi negocio se derrumbe de la noche a la mañana. Sin embargo, estoy feliz de usar una base de código de terceros o servidores si son de código abierto. He usado la API de blockchain.info anteriormente, que fue excelente, pero realmente quiero una solución interna.

Respuestas (1)

No conozco una solución que funcione lista para usar con los requisitos que ha establecido. Sin embargo, puede hacer algo de lo que necesita usando algunas herramientas de línea de comandos disponibles en github.

Pycoin tiene una utilidad clave que se puede usar para derivar direcciones bip0032 dada una raíz. Aquí hay una introducción rápida sobre cómo usarlo:

$ git clone http://github.com/richardkiss/pycoin
$ cd pycoin
$ sudo make
$ ku <your xpub or xprv key> -s 0/1/2/3/4

Esto le mostrará los datos de la clave bip0032 en la ruta m/0/1/2/3/4. Si agrega el -aargumento, puede obtener la dirección en esta ruta. Si agrega el -Wargumento en su lugar (usando una clave xprv), obtiene el formato WIF. Este formato WIF se puede importar a bitcoind y, a su vez, se puede usar para notificarle y hacer lo que necesite después. Puede eliminar esa clave después del pago, lo que generalmente debería dejar la cantidad de direcciones que se observan más baja de lo que podría ser (aunque querrá purgar de vez en cuando). Esto podría funcionar, pero NO lo recomendaría ya que es una seguridad horrible. Por supuesto, esa es probablemente la razón por la que está reenviando fondos a otra dirección de inmediato, por lo que tiene sentido.

Vas a tener que escribir algo de código independientemente. bitcore es una buena biblioteca para hacer cosas de billetera HD, pero la notificación siempre es un poco complicada.

Muchas gracias, estas suenan como sabias palabras. Mi principal preocupación es sobre la parte de notificación en la que me gustaría que bitcoind invoque algún nodo para invocar una capa de websocket para hablar con el cliente. Supongo que estoy nervioso por la escalabilidad de esta parte, ¿es factible que bitcoind esté monitoreando 10,000 direcciones?
es factible Sin embargo, tendrías que hacer algunas pruebas para averiguarlo.