Redes: testnet y mainnet
Accesly opera sobre Stellar. Cada app en el dashboard elige la red al momento de crearse. La misma infraestructura backend sirve ambas redes de forma aislada por app.
Elección de red por app
Cada app que crees en el dashboard pertenece a exactamente una red: testnet o mainnet. Esta decisión se toma al crear el app y no se puede cambiar después. La razón es simple: los wallets ya deployados quedarían orfans porque no existen cross chain.
Un app testnet no se convierte en un app mainnet. Para desarrollar y después salir a producción, creás dos apps distintos: uno testnet y uno mainnet. Configurás ambos appId en tus environments correspondientes.
Diferencias operacionales
| Aspecto | Testnet | Mainnet |
|---|---|---|
| Uso | Desarrollo, testing, QA | Fondos reales, producción |
| Fondeo | Friendbot gratis (10 mil XLM testnet) | On ramp fiat via Dynerox, o transferencia de otro exchange |
| KYC obligatorio | No | Sí para operaciones fiat |
| USDC emisor | USDC Circle testnet | GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN |
| Network passphrase | Test SDF Network ; September 2015 | Public Global Stellar Network ; September 2015 |
| Soroban RPC | soroban testnet stellar org | soroban mainnet stellar org |
| Explorer | stellar.expert / explorer / testnet | stellar.expert / explorer / public |
| Cap por wallet | Sin cap | USD 100 durante beta cerrada |
| Audit del contract | 6 audits internos Almanax | 6 audits internos Almanax |
Configuración del SDK por red
El SDK detecta la red automáticamente leyendo el appConfig de tu app. Vos no configurás la red en el AcceslyProvider. Solo el appId:
<AcceslyProvider
appId={import.meta.env.VITE_ACCESLY_APP_ID}
env="dev"
overrides={{ deviceStore }}
>
El SDK consulta GET /app-config/{appId}, recibe network: "testnet" o "mainnet", y usa el RPC + passphrase + USDC issuer correspondiente para todas las operaciones. Los explorer URLs también apuntan al explorer correcto.
Badge visual
Los componentes del kit muestran un badge sutil cuando la wallet está en mainnet. Es un recordatorio visual para el usuario de que está operando con fondos reales.
- Testnet: badge gris con texto "TESTNET" en la esquina superior del
<WalletHome />. - Mainnet: badge lavanda con texto "MAINNET". Además, componentes de firma (
<SwapFlow />,<SendFlow />) muestran modal de confirmación antes de firmar.
WASM hashes del Smart Account por versión
Cada release del Smart Account tiene su propio WASM hash. El backend elige qué versión deploya para cada wallet nueva según el appConfig.wallet.targetVersion del app dueño. Wallets existentes pueden hacer upgrade individual con firma del owner (admin cfg).
| Versión | Red | WASM hash | Status |
|---|---|---|---|
| v3.2.0 | testnet | f1c549e2491e0f8d9cc7683f6056da2edd8a8c3d6786723ab1c86dae74a96b0e | canary |
| v3.1.0 | testnet | a3173341e307542e9e47089cd00f0e254daa7a90f754c68c1a7ec9e8c70b3c71 | stable |
| v3.2.0 y v3.1.0 | mainnet | Consultar GET /contracts?network=mainnet | Al momento del deploy productivo |
v3.2.0 introduce rotate_signer_partial y finalize_rotation para poder rotar el signer en wallets con 4 o más context rules bajo el cap P27 de writeBytes. v3.1.0 sigue soportando el rotate atómico en wallets chicas y no requiere upgrade forzado.
Migración de testnet a mainnet
Cuando estés listo para pasar tu integración de desarrollo a producción:
- En el dashboard, creás un app nuevo con network = mainnet. Copiás el branding del app testnet (los toggles están en Settings).
- Agregás los redirect URIs de tu ambiente de producción al app mainnet (Cognito Google OAuth es estricto con matching).
- Pedís acceso a KYC prod de Dynerox si vas a usar on ramp (los API keys son distintos entre sandbox y prod).
- En tu
.envde producción, cambiásVITE_ACCESLY_APP_IDal appId mainnet. - Deploy a producción. Testeás la primera vez con vos mismo antes de abrir a users.
Un usuario que creó wallet testnet no tiene wallet mainnet. Son cuentas separadas. En prod arrancás con base de usuarios vacía. Para testers internos, cada uno tiene que hacer signup nuevo en el app mainnet.
Fondear una wallet en mainnet
A diferencia de testnet donde hay Friendbot gratis, en mainnet el usuario tiene que traer XLM real. Opciones:
- On ramp fiat via Dynerox: usuario paga en MXN por SPEI, recibe USDC en su Smart Account. Requiere KYC verificado. Ver KYC y fiat.
- Transferencia externa: el usuario transfiere XLM o USDC desde otro exchange (Kraken, Binance, Coinbase) o wallet a la dirección de su Smart Account.
- Recibir dentro del ecosistema: otro usuario Accesly le manda XLM o USDC directo a su address.
El primer fondeo tiene un mínimo práctico de 1 XLM (aproximadamente 12 centavos de dólar) para cubrir la reserve base de la cuenta Stellar. Sin esto la cuenta no queda en un estado transactable.
Direcciones importantes en mainnet
| Contrato | Address |
|---|---|
| USDC issuer (Circle) | GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN |
| USDC SAC contract | CCW67TSZV3SSS2HXMBQ5JFGCKJNXKZM7UQUWUZPUTHXSTZLEO7SJMI75 |
| Smart Account v3 WASM hash | Consultable en GET /contracts?network=mainnet |
Siguientes pasos
- Crear un app mainnet en el dashboard.
- Habilitar on ramp con MXN para tus usuarios.
- Configurar el SDK con appId de producción.