Sistema de remesas recurrentes con programa Anchor en Solana, backend Express, bot WhatsApp (Baileys), Blinks y keeper cron.
remesa-blink/
├── anchor/remesas_recurrentes/ # Programa Anchor
├── backend/ # API Express + Keeper
├── bot/ # Bot WhatsApp (Baileys)
├── blinks/ # Servidor Blinks
├── db/ # Schema PostgreSQL
└── README.md
- Node.js 18+
- PostgreSQL
- Solana CLI (Anchor)
- Rust
cd anchor/remesas_recurrentes
yarn install
anchor build
anchor deploy --provider.cluster devnetAnota el PROGRAM_ID (en Anchor.toml) para el backend.
Opción A - Docker (si tienes Docker instalado):
docker compose up -d
sleep 5 && npm run db:schemaOpción B - PostgreSQL local:
sudo apt install postgresql postgresql-client
sudo service postgresql start
sudo -u postgres createdb remesa_blink
# Ajusta user/pass en backend/.env para tu usuario PostgreSQL
npm run db:schemaOpción C - Neon/Supabase (gratis, sin instalar):
- Crea cuenta en neon.tech o supabase.com
- Crea un proyecto y copia la connection string
- Ponla en
backend/.envcomoDATABASE_URL npm run db:schema(desde la raíz del proyecto)
Copia los .env.example en cada módulo y configura:
backend/.env
DATABASE_URL: PostgreSQLSOLANA_RPC_URL: https://api.devnet.solana.comPROGRAM_ID: ID del programa AnchorKEEPER_PRIVATE_KEY: Clave base58 del keeper (wallet que ejecuta pagos)
bot/.env
API_BASE_URL: http://localhost:3000
blinks/.env
PORT: 3001BLINKS_BASE_URL: URL pública del servidor Blinks
solana airdrop 2 <KEEPER_ADDRESS> --url devnetEn terminales separadas (o desde raíz con npm run):
# Backend API + Blinks (unificado)
npm run dev
# o: cd backend && npm run dev
# Keeper (cron cada hora)
npm run keeper
# Bot WhatsApp
cd bot && npm install && npm run startScripts desde raíz:
npm run dev— Backend + Blinksnpm run keeper— Keeper cronnpm run keeper:airdrop— Dirección para airdropnpm run keeper:usdc-ata— Crear ATA USDC del keepernpm run e2e:usdc— E2E: suscripción USDC + keeper
- Registrar suscripción SOL:
/recurrente 0.01 diario 521234567890 F3bBUduLLoLFxCpEmPuQXvHwM2yshiHFuTvAcGJ4ANm3 - Registrar suscripción USDC:
/recurrente 10 USDC diario 521234567890 F3bBUduLLoLFxCpEmPuQXvHwM2yshiHFuTvAcGJ4ANm3 - Ver suscripciones:
/mis-remesas - Cashback:
/cashback,/generar-codigo - Blinks:
enviar-remesa(SOL),enviar-remesa-usdc(USDC),convertir-mxn(USDC→MXN),onboarding-mxn(KYC+CLABE)
- Destinatario completa onboarding:
POST /api/etherfuse/onboarding-urlcon{ destinatario_solana, destinatario_wa? }→ obtiene URL Etherfuse (KYC + CLABE) - Etherfuse envía webhook
kyc_updated→ actualizamosbeneficiarios_etherfuse.kyc_status = 'verified' - Keeper ejecuta pago USDC → incluye Blink
convertir-mxn(si KYC ok) oonboarding-mxn(si pendiente) - Destinatario usa Blink
convertir-mxn→ firma burn USDC → recibe MXN en SPEI
| Comando | Descripción |
|---|---|
| /start, /ayuda | Mensaje de bienvenida |
| /recurrente [monto] [SOL|USDC] [frecuencia] [destinatario_wa] [wallet_solana] | Registrar remesa recurrente (SOL por defecto) |
| /mis-remesas | Listar suscripciones activas |
| /cashback, /mis-recompensas | Ver saldo cashback |
| /generar-codigo | Generar código de referido |
| /canjear [monto] | Canjear cashback |
| /soporte | Contactar soporte |
| Método | Ruta | Descripción |
|---|---|---|
| POST | /api/suscripciones | Registrar suscripción |
| GET | /api/suscripciones/:wa | Listar suscripciones |
| POST | /api/cashback/generar-codigo | Generar código referido |
| POST | /api/cashback/registrar-referido | Registrar referido |
| GET | /api/cashback/:wa | Resumen cashback |
| POST | /api/cashback/canjear | Canjear cashback |
| POST | /api/etherfuse/onboarding-url | URL KYC+CLABE (destinatario_solana, destinatario_wa?) |
| Día | Tareas |
|---|---|
| 1 | Programa Anchor, deploy devnet |
| 2 | Schema PostgreSQL, backend DB |
| 3 | Endpoints suscripciones y cashback |
| 4 | Keeper cron |
| 5 | Bot Baileys |
| 6 | Blinks, pruebas E2E |
| 7 | README, ajustes |