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
Open
Conversation
… 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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
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 tag2607170001presente.soroban.ts: el network passphrase estaba fijo a testnet sin leerSTELLAR_NETWORK, así que aunqueSTELLAR_RPC_URLapuntara a mainnet, las tx se firmaban con el passphrase equivocado.EscrowCreate/EscrowCancelsin 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.apiyweb.Test plan
npm run typecheck -w @micopay/apilimpionpm run test:live:mainnet -w @micopay/api) completó las 4 tx, verificadas independientemente en stellar.expert / livenet.xrpl.orgmicopaybridgees el repo que cuenta para el §8 del Mainnet Gate (repo público obligatorio) o si esto también debe reflejarse enmicopay-protocolXRPL_SWEEPER_SEEDsigue sin configurar — sin eso, los escrows de activación vencidos requieren reclamo manual del usuario🤖 Generated with Claude Code