Un bot de Telegram para facilitar transacciones de criptomonedas (multi-moneda) de forma segura y no custodial, utilizando depósitos en garantía (escrow) en la blockchain.
Este proyecto se encuentra en una fase temprana de desarrollo y contiene un fallo crítico de seguridad en su estado actual. La gestión de claves privadas NO ES SEGURA y resultará en la PÉRDIDA PERMANENTE DE FONDOS.
NO UTILICE ESTE BOT PARA TRANSACCIONES REALES. Está destinado únicamente para fines educativos y de desarrollo. La máxima prioridad es rediseñar el sistema de gestión de claves antes de que pueda ser considerado para un uso seguro.
Este bot actúa como un intermediario neutral para transacciones entre un comprador y un vendedor. En lugar de confiar en una de las partes, los fondos se bloquean en un mecanismo de escrow directamente en la blockchain.
- Para Bitcoin/Litecoin: Se crea una cartera multi-firma 2-de-3, donde para mover los fondos se requiere la firma de 2 de los 3 participantes (comprador, vendedor o árbitro).
- Para Ethereum/EVM (planeado): Se despliega un contrato inteligente único para cada transacción que retiene los fondos.
El bot gestiona la comunicación y el flujo de la transacción, pero nunca tiene el control total de los fondos, garantizando un proceso descentralizado y seguro.
- Arquitectura Limpia: Separación clara en capas de presentación, lógica de negocio y datos.
- Multi-Moneda: Diseñado con un Patrón Strategy para soportar fácilmente diferentes blockchains (BTC, LTC implementados, EVM, XMR planeados).
- No Custodial: El bot no almacena las claves privadas de los usuarios.
- Persistencia: Usa SQLAlchemy para gestionar la base de datos de usuarios y transacciones.
- Configuración Moderna: Emplea
pydantic-settingspara una gestión de la configuración robusta y centralizada.
- Lenguaje: Python 3.10+
- Framework del Bot:
python-telegram-bot - Base de Datos: SQLAlchemy ORM (con SQLite por defecto)
- Interacción Blockchain:
python-bitcoinlibpara Bitcoin y similares.web3.py(planeado para EVM).
- Contratos Inteligentes: Solidity
Sigue estos pasos para poner en marcha el bot en un entorno de desarrollo.
-
Clonar el Repositorio:
git clone https://github.com/EricPeD/escrow-bot-tlg.git cd escrow-bot-tlg -
Crear y Activar un Entorno Virtual:
python3 -m venv venv source venv/bin/activate # En Windows: venv\Scripts\activate
-
Instalar Dependencias:
pip install -r requirements.txt
-
Configurar Variables de Entorno:
- Copia el archivo de ejemplo:
cp .env.example .env - Edita el archivo
.envy añade tus credenciales:TELEGRAM_BOT_TOKEN: El token de tu bot, obtenido de @BotFather en Telegram.ARBITER_PRIVATE_KEY: Una clave privada en formato WIF para la cartera que actuará como árbitro en las transacciones de BTC/LTC. Úsala solo en Testnet.BITCOIN_NETWORK: La red a utilizar (por defectotestnet).
- Copia el archivo de ejemplo:
-
Ejecutar el Bot: El comando debe ejecutarse desde el directorio raíz del proyecto para que las importaciones funcionen correctamente.
python -m src.main
Si todo está configurado correctamente, verás un mensaje de "Iniciando bot..." en la consola.
/start: Inicia el bot y te registra en el sistema./help: Muestra la lista de comandos disponibles./escrow @vendedor <cantidad> <token>: Inicia una nueva transacción de escrow.- Ejemplo:
/escrow @triskis 100000 BTC
- Ejemplo:
/cancel: Cancela la operación actual.
- Refactorización de Seguridad (Prioridad #1): Implementar un flujo donde el bot solicita claves públicas a los usuarios en lugar de generarlas.
- Implementación de APIs de Blockchain: Completar la integración con APIs de exploradores de bloques para verificar saldos, UTXOs y transmitir transacciones.
- Servicio de Monitoreo de Depósitos: Crear un job en segundo plano para detectar automáticamente los depósitos en las direcciones de escrow.
- Implementar Estrategia EVM: Integrar el contrato
Escrow.solconweb3.py. - Comandos de Liberación y Disputa: Añadir los comandos
/releasey/disputepara completar el ciclo de la transacción. - Añadir Tests: Implementar tests unitarios y de integración.
Las contribuciones son bienvenidas, especialmente para abordar los puntos de la hoja de ruta. Por favor, abre un issue para discutir los cambios que te gustaría hacer.
- Haz un Fork del proyecto.
- Crea tu rama de funcionalidad (
git checkout -b feature/AmazingFeature). - Haz Commit de tus cambios (
git commit -m 'Add some AmazingFeature'). - Haz Push a la rama (
git push origin feature/AmazingFeature). - Abre un Pull Request.
Distribuido bajo la Licencia MIT. Ver LICENSE para más información.