Me gustaría crear un script de python que escuche la red de bitcoin y monitoree algunas direcciones, almacenadas en una base de datos mysql. Tan pronto como se transmite una transacción con una de estas direcciones como salida, el script debería ejecutar una función.
No necesito almacenar toda la cadena de bloques, ni quiero hacerlo. Las claves privadas tampoco están en la misma máquina, por seguridad. No hay billetera en esta máquina, solo una lista de direcciones en una base de datos.
Por el momento lo he implementado con los webhooks de blockchain.info y también lo he probado con blocktrail. Funciona pero no lo suficientemente rápido para lograr mis objetivos, estas soluciones son demasiado lentas para ser prácticas. Necesito ser notificado inmediatamente.
He mirado varias opciones pero ninguna parece encajar como un buen punto de partida. (BitcoinJ parece el más cercano pero está en Java) No puedo creer que no exista tal cosa, simplemente no pude encontrar una.
Entonces, ¿puedes guiarme en la dirección correcta?
Si solo escucha las transacciones en la red sin tener un nodo de validación propio, no tendrá absolutamente ninguna forma de saber si son legítimas o no. Debe tener un nodo de validación total a nivel local; de lo contrario, las transacciones se pueden fabricar sin costo para gastar cualquier cantidad de dinero en cualquier lugar. No hay recurso si te equivocas, esta es principalmente la razón por la que nadie ha implementado ningún tipo de validación en Python, hay varios bits del protocolo p2p en Github , pero hace exactamente una validación de consenso cero en los datos que recibe .
El master
Bitcoin Core actual (y el próximo lanzamiento 0.12 a fin de año) contienen una interfaz ZMQ que le brinda un suministro en tiempo real de transacciones validadas. Un nodo completo (recortado) se puede ejecutar en tan solo 2 GB de espacio y no requiere muchos recursos para alguien que administra un negocio. Hay un código de ejemplo para eso disponible en github como zmq_sub.py que debería ayudarlo a comenzar, solo tenga en cuenta que ZMQ no tiene garantía de entregabilidad, algunos mensajes pueden descartarse silenciosamente si hay problemas de conectividad.
Es importante tener en cuenta que una transacción no confirmada no tiene garantía de confirmación y puede invalidarse en cualquier momento. Aceptar cero confirmaciones es extremadamente arriesgado, aunque actualizar una interfaz de usuario con una lista de transacciones no confirmadas es un comportamiento perfectamente razonable.
Al final opté por la API websocket de Blockchain en combinación con el cliente Python websocket de Hiroki Ohtani . Este mecanismo es realmente instantáneo y parece estable y usable. Sin embargo, todavía me preocupa tener que poner mis huevos en una canasta. Entonces, compruebo dos veces y también uso la API de webhooks de Blocktrail .
Este sistema aún no me brinda una seguridad 100% infalible, pero puedo vivir con esta configuración, hasta que aparezca un sistema mejor o pueda hacer algo mejor.
¡Gracias a todos por ayudar, y espero que esta respuesta pueda servir como idea/base para sus propios proyectos de Bitcoin!
Si tiene una copia sin procesar de la transacción, puede volver a publicarla una y otra vez hasta que se confirme. Incluso con tarifas de transacción muy bajas, debería confirmarse al final (pero puede llevar mucho tiempo)
DDecoeno
claris
DDecoeno
DDecoeno
claris