Fase 7: retirar la infraestructura de custodia
20 de abril de 2026: la Fase 7 es la limpieza. Cuando lleguemos aquí, el volumen de EVM y Solana estará en receptores en contrato y en SubscriptionHub, Bitcoin estará en multisig 2 de 2 y ningún enlace de pago nuevo pasará por el camino de barrido heredado. Esta fase elimina el código heredado y los secretos heredados.
En resumen
- Eliminar
hd_wallet_seed, la configuraciónWALLET_ENCRYPTION_KEYy la lógica de derivación para las cadenas con el flag. - Borrar los caminos de EVM/SOL en
api/src/withdrawals/:SmartAccountWalletService.drainSmartAccountWallet,solana-withdrawal-transfer.service.tsy los archivos de spec relacionados. - Mantener el camino de BTC (reducido al modelo 2 de 2 de la Fase 5).
- Actualizar los términos del servicio, la política de privacidad y los controles SOC2 para reflejar una superficie de custodia mucho menor.
- Publicar un postmortem que resuma lo aprendido.
Qué cambia en esta fase
Antes de esta fase, el código tiene dos versiones de todo (el camino de barrido antiguo y el nuevo camino por contrato) detrás de feature flags. Después de esta fase, el camino nuevo es el único en EVM y Solana.
Qué eliminamos
Base de datos
- La tabla
hd_wallet_seedy su entidad TypeORM en api/src/payments/infrastructure/persistence/relational/entities/hd-wallet-seed.entity.ts. - La columna
wallet_address.derivationPathse conserva para consultas históricas, pero pasa a admitir nulos; ninguna fila nueva la escribe para EVM/SOL. - Una migración archiva las filas de semillas cifradas en almacenamiento en frío durante siete años (retención regulatoria) y luego elimina la tabla.
Código
En api/src/payments/wallet.service.ts:
- Eliminar
encryptSeed,decryptSeed,getOrCreateHDWallet,generateAddressForNetwork(ramas de EVM + SOL),getNextAvailableIndexy la importación dinámica de@account-kit/wallet-client. getOrCreateAddressForPaymentLinkpasa a ser un envoltorio fino sobrefactory.computeAddresspara EVM yfindProgramAddressSyncpara Solana.
En api/src/withdrawals/services/smart-account-wallet.service.ts:
- Eliminar
drainSmartAccountWallet,transferFromSmartAccount,batchTransferFromSmartAccount,getSmartAccountClientForDepositWalletyderivePrivateKey. - El módulo se mantiene (todavía tiene un uso pequeño para utilidades relacionadas con BTC y para leer saldos).
Otras eliminaciones:
- api/src/withdrawals/services/solana-withdrawal-transfer.service.ts
- Los archivos
.spec.tsy fixtures correspondientes. - La rama custodial de
subscription-auto-charge.processor.ts(queda la ramaSubscriptionHub.charge).
Configuración
WALLET_ENCRYPTION_KEY: se elimina de.env, de los secretos de despliegue y de la documentación.- Cualquier material de firmante de Alchemy Account Kit en la configuración (las claves de API de
@account-kit/*se mantienen si se siguen usando para el paymaster).
Qué se mantiene
- Hot wallet de BTC: reducida al modelo multisig 2 de 2 de la Fase 5. No queda ninguna semilla HD de EVM/SOL.
- Política de paymaster de Alchemy: la usa el keeper para patrocinar
charge()cuando aplica. - Ejecutores de puente de Relay: siguen orquestando la liquidación entre cadenas; quienes llaman son EOA de keeper, no firmantes custodiales.
- Todos los webhooks, emails, facturación, panel y analíticas: sin cambios.
Actualizaciones legales y de cumplimiento
- Términos del servicio: «OrcaRail no custodia fondos de EVM ni de Solana durante la liquidación de pagos» pasa a ser una afirmación factual, no un texto aspiracional.
- Política de privacidad: eliminar las referencias al material de semillas almacenado.
- Alcance de SOC2: los controles de custodia se reducen; los hallazgos de auditoría se mapean a la nueva superficie, más pequeña.
- Postura como transmisor de dinero: nueva revisión con asesoría legal. Menos puntos de contacto con la custodia simplifican el análisis en varias jurisdicciones.
Postmortem
Un artículo complementario resumirá lo aprendido en las Fases 0 a 7: qué tardó más de lo esperado, qué fue mejor, cuál fue el coste real de ingeniería de la no custodia y cómo reaccionaron los comercios. Cadencia prevista: un artículo en los 30 días siguientes a la publicación de la Fase 7.
Obsolescencias (ninguna nueva)
Esta fase es en sí misma la obsolescencia. Todos los caminos con el flag useOnChainReceiver pasan a estar activados por defecto; el flag se elimina.
Plan de migración
Cuando se ejecute la Fase 7, todos los pagos y suscripciones nuevos llevarán más de 12 meses siendo no custodiales. La migración se centra en la cola larga de enlaces heredados:
- Enlaces de pago heredados abiertos y caducados → liquidar el polvo residual con un script de una sola vez y parar.
- Suscripciones heredadas que nunca migraron → aviso por email 30 días antes del cierre, migración en un clic en el panel y suspensión del cobro automático si no migran.
- Saldos residuales en direcciones de depósito heredadas → barrer por última vez con el antiguo camino de drenaje hacia las direcciones de retiro del comercio y luego retirar las claves.
Riesgos y mitigaciones
- Polvo residual en direcciones antiguas. Mitigación: ejecutar un script de barrido final antes del desmantelamiento; publicar en un informe público cualquier polvo irrecuperable.
- Riesgo legal por eliminar demasiado pronto. Mitigación: archivo de 7 años de las filas de semillas cifradas (nunca descifrables sin la clave de cifrado, que se destruye en una ceremonia); los auditores pueden seguir verificando el estado histórico.
- Alguien depende de una forma de API no documentada. Mitigación: aviso público de obsolescencia con 90 días; entrada en el changelog de la API; contacto directo con los principales comercios.
Lista de estado
- Todos los comercios de EVM + SOL en el flujo no custodial durante al menos 90 días
- Suscripciones heredadas residuales a cero
- Script de barrido final completado
- Migración de
hd_wallet_seedal archivo en frío completada - Eliminaciones de código fusionadas
- Términos del servicio + política de privacidad actualizados y publicados
- Artículo de postmortem publicado
El final de la hoja de ruta
Tras la Fase 7, la postura de custodia es:
- EVM, Solana: no custodial. OrcaRail no guarda ningún material de semillas.
- Bitcoin: custodia reducida mediante multisig 2 de 2 con firmante del comercio.
- Momento en tránsito: eliminado en EVM/SOL; reducido a un camino de reembolso multisig en BTC.
Eso es lo que nos propusimos en la hoja de ruta no custodial.
Documentación de referencia: Estado de la Fase 7 · Modelo de seguridad · Hoja de ruta
