Guía de intercambio (React)
Tutorial completo de integración de swaps: crea una interfaz de swap de tokens usando el SDK de STON.fi y React
Esta guía te mostrará cómo crear una aplicación básica de intercambio de tokens usando el SDK y la API de STON.fi en una React proyecto. Integraremos la conectividad de la billetera con TonConnect (a través de @tonconnect/ui-react) para permitir que los usuarios conecten su billetera TON y realicen un intercambio. La guía está pensada para principiantes y asume una experiencia mínima con React.
Nota: En esta demo, aprovecharemos Tailwind CSS para el estilo en lugar de usar CSS personalizado. La configuración de Tailwind CSS ya está incluida en las instrucciones de abajo, así que no necesitas configurarlo por separado.
Nota: Puedes usar cualquier gestor de paquetes (npm, yarn, pnpm o bun) para configurar tu proyecto React. En este tutorial, lo mostraremos con pnpm.
Índice
1. Introducción
En este inicio rápido, construiremos una aplicación React mínima para:
Conectarse a una billetera TON (a través de TonConnect UI).
Obtener los tokens disponibles de STON.fi (a través de
@ston-fi/api).Simula un intercambio (para ver la salida esperada).
Ejecuta una transacción de intercambio en la cadena (vía
@ston-fi/sdk).
Usaremos:
@ston-fi/sdk– Ayuda a construir la carga útil para la transacción real de intercambio.@ston-fi/api– Nos permite obtener listas de activos, datos de pools y ejecutar simulaciones de intercambio.@tonconnect/ui-react– Proporciona un botón de conexión a billetera TON basado en React y utilidades.
2. Configuración del proyecto
2.1 Crear una aplicación React
Primero, comprobemos si pnpm está instalado en tu sistema:
Si ves un número de versión (como 10.4.0), pnpm está instalado. Si obtienes un error, primero tendrás que instalar pnpm:
Ahora crearemos un nuevo proyecto de React usando Vite. Sin embargo, puedes usar cualquier configuración de React que prefieras (Next.js, CRA, etc.).
Ejecuta el siguiente comando para crear un nuevo proyecto de React basado en Vite:
Cuando se te solicite, escribe el nombre de proyecto que deseas (por ejemplo, stonfi-swap-app):
Luego entra en la carpeta:
2.2 Instalación de los paquetes necesarios
Dentro del directorio de tu nuevo proyecto React, instala los paquetes de STON.fi y TonConnect UI:
A continuación, instala Tailwind CSS y su plugin para Vite:
Además, instala el plugin de polyfills de Node.js para Vite, que es necesario para proporcionar Buffer y otras APIs de Node.js en el entorno del navegador (requerido por las bibliotecas de TON):
Configura el plugin de Vite actualizando el archivo vite.config.js archivo. Solo hacemos polyfill del buffer módulo y exponemos la variable global Buffer para evitar incluir shims no utilizados en el bundle:
Luego, importa Tailwind CSS en tu archivo CSS principal. Abre src/index.css y reemplaza todo el código por:
También puedes eliminar src/App.css ya no lo necesitamos y elimina la declaración de importación import './App.css' de src/App.jsx.
Después de hacer estos cambios, puedes verificar que tu aplicación sigue funcionando correctamente iniciando el servidor de desarrollo:
Esto debería iniciar tu aplicación en modo desarrollo, normalmente en http://localhost:5173. Deberías ver el logotipo y el texto de Vite + React sobre un fondo blanco simple. Como hemos eliminado el estilo predeterminado (App.css), la página se verá más sencilla que la plantilla por defecto.
Si ves el logotipo y el texto, significa que tu configuración de Vite + React está funcionando correctamente. Asegúrate de que todo cargue sin errores antes de continuar con el siguiente paso.
3. Conectar la billetera
3.1 Agregar el proveedor TonConnect
Abre src/main.jsx (punto de entrada predeterminado de Vite) y envuelve tu aplicación con el TonConnectUIProvider. Este proveedor hace que el contexto de TonConnect esté disponible para tu app y permita la conexión con billeteras. Además, indícale un archivo manifest (que crearemos a continuación) que describa tu app a las billeteras.
Esto envuelve el <App /> componente con TonConnectUIProvider. El manifestUrl apunta a un tonconnect-manifest.json archivo que debe servirse en la raíz de tu app (lo crearemos abajo). Usar window.location.origin asegura que use el host correcto (por ejemplo, http://localhost:5173/tonconnect-manifest.json en desarrollo).
3.2 Crear el manifiesto de TonConnect
En la public carpeta de tu proyecto, crea un archivo llamado tonconnect-manifest.json. Este manifest proporciona a las apps de billetera información sobre tu aplicación (como el nombre y el icono). Debes personalizar este manifest para tu propia aplicación. Aquí tienes un ejemplo:
Asegúrate de actualizar estos campos para tu aplicación:
url: La URL base desde la que se sirve tu aplicación
name: El nombre visible de tu aplicación (esto es lo que las billeteras mostrarán a los usuarios)
iconUrl: Un enlace al icono de tu aplicación (debe ser una imagen PNG de 180×180)
Asegúrate de que este archivo sea accesible. Cuando se ejecute el servidor de desarrollo, deberías poder obtenerlo en tu navegador en http://localhost:5173/tonconnect-manifest.json.
3.3 Agregar el botón de conectar billetera
En tu App principal, componente (por ejemplo, src/App.jsx), importa e incluye el TonConnectButton. Por ejemplo:
Esto renderizará un botón "Connect Wallet". Al hacer clic, abrirá un modal con las billeteras TON disponibles. Después de que el usuario conecte, el botón mostrará automáticamente la dirección de la billetera o la información de la cuenta. TonConnect UI gestiona el estado de conexión por ti.
4. Obtener los activos disponibles
A continuación, recuperemos la lista de tokens (activos) que se pueden intercambiar en STON.fi. Usamos el cliente de la API de STON.fi (@ston-fi/api) para esto. Es importante señalar que, aunque muchos tokens en la blockchain de TON usan una precisión decimal de 9, algunos tokens, como jUSDT, tienen una precisión decimal de 6. Por lo tanto, nos basamos en los metadatos del token para determinar dinámicamente la precisión decimal, garantizando compatibilidad entre distintos tokens.
Inicializa el cliente de la API: En el componente donde manejarás el intercambio (podemos seguir trabajando en App.jsx por simplicidad), crea una instancia de cliente desde
StonApiClient. Esta tiene métodos para obtener activos, pools, simular intercambios, etc.Obtén los activos al cargar: Usando el hook de efecto de React, recupera la lista de activos cuando el componente se monte. Guarda los activos en el estado para poder mostrarlos.
Ahora tu aplicación muestra:
Un botón "Connect Wallet"
Dos menús desplegables con tokens de STON.fi
Un campo de entrada para la cantidad
Botones "Simulate" e "Swap" (aún no funcionales).
5. Simulación de un intercambio
Antes de ejecutar una transacción de intercambio, es una buena práctica simularla. La simulación nos dice cuántos tokens de destino deberíamos recibir dada una cantidad de entrada, teniendo en cuenta la liquidez y el slippage. Usaremos la simulateSwap función de StonApiClient.
Eso es todo para la simulación. Ahora, si:
Seleccionas los tokens "From" y "To"
Introduces una cantidad
Haces clic en "Simulate"
…deberías ver una salida esperada.
6. Ejecución de una transacción de intercambio
Por último, hagamos que el botón Swap realmente envíe una transacción. Usaremos @ston-fi/sdk para construir los parámetros del intercambio y enviarlos a la billetera mediante TonConnect.
Solo añadimos un manejador más, handleSwap, y lo conectamos al botón Swap. También importaremos todo lo necesario desde @ston-fi/sdk, además del hook de TonConnect UI para enviar transacciones.
En App.jsx, cerca de la parte superior:
Dentro del componente App, después de handleSimulate, añade:
Por último, adjunta este nuevo manejador al botón Swap:
Todo lo demás permanece igual que en el paso #5.
7. Prueba de tu intercambio
Ahora que tu app está en ejecución, puedes probar la funcionalidad de intercambio:
Conecta tu billetera haciendo clic en el botón "Connect Wallet" y seleccionando tu billetera TON en el modal.
Selecciona tokens en los menús desplegables:
Elige un token que poseas en el desplegable "From"
Selecciona un token que quieras recibir en el desplegable "To"
Introduces una cantidad que deseas intercambiar (asegúrate de que sea una cantidad que realmente tengas en tu billetera).
Simula el intercambio haciendo clic en el botón "Simulate" para ver la cantidad de salida esperada antes de confirmar la transacción.
Ejecuta el intercambio haciendo clic en el botón "Swap". Esto hará que tu billetera te pida aprobar la transacción.
Confirma en tu billetera cuando aparezca la solicitud de aprobación.
Una vez completado con éxito, la transacción se procesará en la cadena y los saldos de tu billetera se actualizarán en consecuencia. Todo el proceso suele tardar solo unos segundos en completarse.
8. Conclusión
Ahora tienes una app con React + Vite y Tailwind CSS que:
Se conecta a una billetera TON usando TonConnect.
Obtiene los tokens disponibles de STON.fi.
Simula intercambios (mediante simulateSwap).
Construye y envía transacciones de intercambio (mediante @ston-fi/sdk).
Más información: DeFi fácil para proyectos TON: integración de STON.fi
Siéntete libre de ampliar esta demo con:
Mejor manejo de decimales para cada token.
Configuración personalizada de tolerancia al slippage.
Mensajes de error/éxito más robustos.
¡Feliz desarrollo en TON y STON.fi!
9. Demo en vivo
Con esta demo de Replit, puedes:
Abrir el proyecto directamente en tu navegador
Hacer un fork del Replit para crear tu propia copia
Ejecutar la aplicación para verla en acción
Explorar y modificar el código para aprender cómo funciona
Experimentar con diferentes funciones y cambios en la interfaz
10. Aplicación de ejemplo avanzada
Para quienes buscan un enfoque más avanzado y con más funciones, también tenemos una Demo App en Next.js que:
Usa Next.js para un framework escalable
Utiliza hooks y providers para una arquitectura elegante
Demuestra un mejor manejo de errores, una gestión de estado robusta y funciones adicionales de STON.fi
Puedes explorar el código en nuestro repositorio:
Aplicación demo de Next.js del SDK de STON.fi
O verla en acción en nuestra demo en vivo:
Última actualización