Punto de partida para escuchar las transacciones de la red bitcoin en Python

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?

Respuestas (3)

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 masterBitcoin 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.

No he visto el problema de esta manera. Es muy cierto lo que dices. Necesito transacciones validadas y necesito más de cero confirmaciones, sí. PERO, lo que estoy tratando de lograr es que un cliente pueda pagarme en la tienda en nuestro POS. No puedo decirle a mi cliente que espere un par de minutos hasta que reciba x confirmaciones. Está acostumbrado a la verificación instantánea de su tarjeta de débito/crédito. Creo que tendré que implementar niveles de monto versus confirmaciones, como valor inferior a $ 10 = 0 conf, $ 100 = 1, ... y $ 10.000+ = 6 conf.
No puede hacer esto de manera segura con Bitcoin, no está diseñado para eso. Fingir lo contrario puede dejarle una cantidad ilimitada de dinero de su bolsillo, las empresas han perdido cientos de miles de dólares en ataques muy poco sofisticados contra transacciones de confirmación cero. Posiblemente con canales de pago en el futuro, las transacciones instantáneas con Bitcoin podrían ser una opción, pero no hoy.
OT Danger: Es mi deseo ayudar a que las criptomonedas se generalicen. Soy uno de los fundadores de Ieper bitcoincity www.ieperbitcoinstad.be y participo en un proyecto similar en Kortrijk, ambos en Bélgica. Para hacer esto, no podemos usar una altcoin, que podría abordar estos problemas. Todo lo que la gente sabe en este momento es Bitcoin. Han oído hablar de ello en alguna parte. Informamos a las personas con nuestras iniciativas. Para comenzar, quería ofrecer a los comerciantes una plataforma para aceptar BTC y obtener EUR depositados en su cuenta, como bitpay y bitkassa, solo locales, belgas, de confianza. El objetivo es ayudar a la transición. ¿Cómo lo hacen entonces?
El objetivo a más largo plazo de mi plataforma es que los comerciantes digan 'oye, ya no necesito convertir a Eur, puedo pagar a mis proveedores con BTC'. Esto podría crear un ecosistema que sea sostenible. Comparo BTC con Internet en el '93. La gente se preguntaba qué significaba http o @ y tal. Ahora somos los pioneros en la revolución financiera. Las revoluciones son arriesgadas ;-) Nunca he rehuido los riesgos (calculados). No planeo ir a la bancarrota, pero estar completamente seguro es una ilusión en los negocios de todos modos. Gracias por su aporte de bienvenida, señor, realmente lo aprecio.
Sin embargo, la nobleza no resuelve los problemas técnicos.

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)

Pero, ¿cómo saber si está confirmado? Y, en una nota relacionada, si no está confirmado, ¿cómo sabes si es válido?