Básico
Spot
Opera con criptomonedas libremente
Margen
Multiplica tus beneficios con el apalancamiento
Convertir e Inversión automática
0 Fees
Opera cualquier volumen sin tarifas ni deslizamiento
ETF
Obtén exposición a posiciones apalancadas de forma sencilla
Trading premercado
Opera nuevos tokens antes de su listado
Contrato
Accede a cientos de contratos perpetuos
CFD
Oro
Plataforma global de activos tradicionales
Opciones
Hot
Opera con opciones estándar al estilo europeo
Cuenta unificada
Maximiza la eficacia de tu capital
Trading de prueba
Introducción al trading de futuros
Prepárate para operar con futuros
Eventos de futuros
Únete a eventos para ganar recompensas
Trading de prueba
Usa fondos virtuales para probar el trading sin asumir riesgos
Lanzamiento
CandyDrop
Acumula golosinas para ganar airdrops
Launchpool
Staking rápido, ¡gana nuevos tokens con potencial!
HODLer Airdrop
Holdea GT y consigue airdrops enormes gratis
Pre-IPOs
Accede al acceso completo a las OPV de acciones globales
Puntos Alpha
Opera activos on-chain y recibe airdrops
Puntos de futuros
Gana puntos de futuros y reclama recompensas de airdrop
Inversión
Simple Earn
Genera intereses con los tokens inactivos
Inversión automática
Invierte automáticamente de forma regular
Inversión dual
Aprovecha la volatilidad del mercado
Staking flexible
Gana recompensas con el staking flexible
Préstamo de criptomonedas
0 Fees
Usa tu cripto como garantía y pide otra en préstamo
Centro de préstamos
Centro de préstamos integral
Centro de patrimonio VIP
Planes de aumento patrimonial prémium
Gestión patrimonial privada
Asignación de activos prémium
Quant Fund
Estrategias cuantitativas de alto nivel
Staking
Haz staking de criptomonedas para ganar en productos PoS
Apalancamiento inteligente
Apalancamiento sin liquidación
Acuñación de GUSD
Acuña GUSD y gana rentabilidad de RWA
Promociones
Centro de actividades
Únete a actividades y gana recompensas
Referido
20 USDT
Invita amigos y gana por tus referidos
Programa de afiliados
Gana recompensas de comisión exclusivas
Gate Booster
Aumenta tu influencia y gana airdrops
Anuncio
Novedades de plataforma en tiempo real
Gate Blog
Artículos del sector de las criptomonedas
AI
Gate AI
Tu compañero de IA conversacional para todo
Gate AI Bot
Usa Gate AI directamente en tu aplicación social
GateClaw
Gate Blue Lobster, listo para usar
Gate for AI Agent
Infraestructura de IA, Gate MCP, Skills y CLI
Gate Skills Hub
+10 000 habilidades
De la oficina al trading, una biblioteca de habilidades todo en uno para sacar el máximo partido a la IA
GateRouter
Elige inteligentemente entre más de 40 modelos de IA, con 0% de costos adicionales
Las técnicas de desarrollo de contratos que aprendí leyendo el código de Uniswap son mucho más interesantes que los libros de texto
Recientemente, al hacer una guía de desarrollo de intercambios descentralizados, profundicé en la implementación de Uniswap V3 y descubrí que algunas formas de escribir el código son realmente ingeniosas. Antes solo había escrito contratos simples de NFT, esta vez fue la primera vez que me puse a entender en serio el código de contratos DeFi, y encontré muchas cosas que vale la pena compartir con quienes quieren aprender sobre Uniswap.
Primero, una cosa que me sorprendió mucho: ¿se puede predecir la dirección del contrato?
Generalmente, la dirección de un contrato desplegado parece aleatoria, pero Uniswap usó un método inteligente. Utiliza el parámetro salt al crear el contrato, junto con la operación CREATE2, para que la dirección generada sea predecible. La forma concreta es «pool = address(new UniswapV3Pool{salt: keccak256(abi.encode(token0, token1, fee))}());» en ese código. La ventaja de esto es que, solo con conocer los tokens y la tarifa, se puede calcular la dirección del contrato del pool sin tener que desplegarlo realmente. Esto es muy útil para verificar permisos de transacción o localizar rápidamente el pool.
El diseño de las funciones de callback también es bastante ingenioso.
En Uniswap, cuando llamas al método swap para hacer un intercambio, se llama a la función swapCallback, que pasa la cantidad de tokens necesaria calculada, y en la devolución de llamada tú transfieres los tokens. La ventaja es que toda la lógica de la transacción se ejecuta de forma completa, sin necesidad de dividir en múltiples pasos o usar variables complejas para garantizar la seguridad. En resumen, A llama a B, y B en su callback vuelve a llamar a A, formando un ciclo cerrado.
El método para estimar transacciones también es bastante hacky: usa excepciones para transmitir información.
Porque al estimar una transacción, en realidad no se realiza un intercambio de tokens, solo se simula. La forma de Uniswap es lanzar errores especiales en el callback, y usar try-catch para capturarlos y analizar la información del error. Parece un poco salvaje, pero es muy práctico, ya que permite implementar la estimación sin modificar mucho el método swap.
La solución para el problema de precisión también es digna de aprender.
Al calcular el intercambio de tokens, si simplemente haces una división, puedes perder precisión. La estrategia de Uniswap es primero desplazar a la izquierda 96 bits (equivalente a multiplicar por 2^96), luego hacer la división, y finalmente eliminar el factor 2^96 en el proceso. Así, dentro del rango de uint256, se puede garantizar precisión sin desbordamiento. Los valores sqrtRatioAX96 y sqrtRatioBX96 en el código reflejan esta lógica, aunque parecen complejos, la idea es clara.
La forma inteligente de calcular las ganancias por tarifas también es muy buena.
En lugar de registrar las tarifas en cada transacción para cada LP (lo cual consumiría mucho gas), se registra la tarifa total y la proporción que corresponde a cada liquidez. Cuando un LP retira, solo necesita multiplicar su liquidez por la tarifa acumulada por acción para calcular sus ganancias, como un accionista que recibe dividendos según sus acciones. Este método de cálculo de participaciones (Share) se aplica en muchos proyectos.
También es muy importante que no toda la información tenga que estar en la cadena.
La lista de pools, información básica, etc., se puede mantener en bases de datos tradicionales, sincronizándose periódicamente desde la cadena, sin necesidad de llamadas RPC en tiempo real. Muchos proveedores de servicios blockchain ahora ofrecen interfaces avanzadas para obtener datos más rápido y barato, siguiendo esta misma lógica.
Por último, la organización del código.
Un proyecto complejo suele dividir los contratos en varias partes para facilitar el mantenimiento, y Uniswap hereda muchos contratos. Además, hay que aprovechar los contratos estándar existentes, como usar directamente OpenZeppelin ERC721 para gestionar las posiciones, lo que mejora la eficiencia y la calidad del código.
Honestamente, leer muchos artículos no reemplaza la experiencia práctica. Al implementar una versión sencilla de un intercambio descentralizado, realmente entiendes por qué Uniswap diseña las cosas así. El curso WTF-DApp está basado en esta idea, guiándote paso a paso en la realización de un proyecto práctico de Uniswap, y seguramente te será de gran ayuda para tu desarrollo de contratos.