Skip to content

Activación XRPL vía Xaman (300 cuentas), deploy real a mainnet, fix de red en el swap - #3

Open
vallejoraul08-debug wants to merge 5 commits into
Micopay:mainfrom
vallejoraul08-debug:feat/xrpl-htlc-referencia
Open

Activación XRPL vía Xaman (300 cuentas), deploy real a mainnet, fix de red en el swap#3
vallejoraul08-debug wants to merge 5 commits into
Micopay:mainfrom
vallejoraul08-debug:feat/xrpl-htlc-referencia

Conversation

@vallejoraul08-debug

Copy link
Copy Markdown
Collaborator

Summary

  • Deploy real de atomic-swap (AtomicSwapHTLC) a Stellar mainnet: CB5TCVEBQDUI2GSQZLMUA2H7FHFHCQLKVGZYJZBECPDVKZCI3PFZUGPU. Smoke test end-to-end contra mainnet real (self-swap Soroban + 1 XRP real entre dos wallets XRPL propias) — las 4 tx verificadas on-chain, source tag 2607170001 presente.
  • Fix de bug real en soroban.ts: el network passphrase estaba fijo a testnet sin leer STELLAR_NETWORK, así que aunque STELLAR_RPC_URL apuntara a mainnet, las tx se firmaban con el passphrase equivocado.
  • Flujo de activación de cuentas para las 300 de Make Waves: endpoint que arma EscrowCreate/EscrowCancel sin firmar y lo manda como payload de Xaman — el usuario firma con su propia wallet, el backend nunca toca una seed (evita la cláusula anti-sybil del T&C §7). Incluye sweeper que cancela solo los escrows vencidos, y tab "Activar" en el dashboard.
  • Migración del deploy a Railway (Railpack, no Docker) para api y web.

Test plan

  • npm run typecheck -w @micopay/api limpio
  • Smoke test mainnet (npm run test:live:mainnet -w @micopay/api) completó las 4 tx, verificadas independientemente en stellar.expert / livenet.xrpl.org
  • Confirmar con el team si micopaybridge es el repo que cuenta para el §8 del Mainnet Gate (repo público obligatorio) o si esto también debe reflejarse en micopay-protocol
  • XRPL_SWEEPER_SEED sigue sin configurar — sin eso, los escrows de activación vencidos requieren reclamo manual del usuario
  • Railway: servicios caídos por trial expirado (billing, no código) — el código de este PR aún no se ha desplegado ahí

🤖 Generated with Claude Code

vallejoraul08-debug and others added 5 commits August 14, 2026 01:05
… fuera mainnet

NET estaba fijo a StellarSdk.Networks.TESTNET sin leer STELLAR_NETWORK. Con
STELLAR_RPC_URL apuntando a mainnet (como en el deploy de hoy), la red del
RPC y el passphrase de firma quedaban desincronizados, y el Asset.contractId()
de USDC/XLM calculaba el SAC de la red que no es. Encontrado corriendo el
smoke test de mainnet contra el contrato recién desplegado.
…ake Waves

Endpoint público (sin login) que arma un EscrowCreate/EscrowCancel sin firmar
y lo manda como payload de Xaman — el usuario firma con su propia wallet, el
backend nunca toca una seed. Es la única forma que no pisa la cláusula
anti-sybil del T&C (§7, scripted transactions), ver docs/ESTRATEGIA_300_CUENTAS.md.

Incluye el sweeper que cancela solo los escrows vencidos (XRPL no lo hace
automático) y el tab "Activar" en el dashboard.
…web)

apps/web/Dockerfile pasa a Dockerfile.local — se conserva para build local,
pero Railway construye api y web con Railpack (railway.json en cada uno),
no con el Dockerfile. El proyecto real es micopaybridge-activation en Railway,
no Render (render.yaml es aparte, para si el team decide usarlo después).
…y real de hoy

atomic-swap ya está en Stellar mainnet (CB5TCVEBQDU...UGPU, ver render.yaml),
y las dos piernas XRPL smoke-testeadas end-to-end contra mainnet real.

live-swap-mainnet.ts es necesario aparte de live-swap.ts: ese es solo testnet
(wallets XRPL efímeras del faucet, alias Stellar de testnet fijos) y no sirve
para probar mainnet ni con las envs cambiadas. Este exige CONFIRM_MAINNET_SWAP=yes
y imprime el plan completo antes de mover nada — mueve fondos reales.
Con la configuración de mainnet de este PR (STELLAR_NETWORK=PUBLIC en
render.yaml) el swap se iba a la red real y la capa de pago se quedaba en
testnet. Cada archivo interpretaba la variable por su cuenta y esperaba una
palabra distinta:

  lib/soroban.ts        STELLAR_NETWORK === "PUBLIC"   → mainnet
  middleware/x402.ts    STELLAR_NETWORK === "MAINNET"  → mainnet

No existía ningún valor que pusiera a los dos en la red real:

  PUBLIC   el swap movía fondos reales, pero verifyPayment enviaba el XDR a
           horizon-testnet: se pagaba con USDC de faucet — gratis — y se
           recibía un swap con dinero de verdad. Afecta a los trece endpoints
           de pago, incluido swaps/execute (0.05) y fund_micopay (0.10).
  MAINNET  los pagos iban bien, pero el swap se firmaba con el passphrase de
           testnet y la red lo rechazaba.

Ni el typecheck ni los tests lo veían, porque cada archivo es coherente
consigo mismo y las suites corren con el valor por defecto, donde ambos
coinciden en testnet. La contradicción solo aparecía con dinero real delante.

- Nuevo lib/stellarNetwork.ts: el único módulo que interpreta la variable.
  Acepta las dos grafías a propósito — PUBLIC es como llama Stellar a su red
  real y es lo que ya usa el deploy; MAINNET es lo que esperaba x402. Rechazar
  una sería otra forma del mismo fallo.
- soroban.ts, x402.ts y scripts/live-swap-mainnet.ts pasan a usarlo. En el
  script era un guardarraíl que clavaba la grafía y habría bloqueado el smoke
  test de mainnet a quien configurara la otra.
- El nombre de red que se anuncia en el reto 402 se normaliza: dependía de
  cómo se hubiera escrito la variable, así que el mismo despliegue podía
  decirle "public" o "mainnet" a los agentes.

Tests: cuatro casos, incluido uno que recorre el árbol y falla si algún módulo
vuelve a comparar STELLAR_NETWORK por su cuenta. Ese caso ya encontró el
tercer sitio (el script del smoke test) que la revisión a mano se había
saltado.

Verificado sobre esta rama: typecheck limpio, npm test en verde.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants