Análisis de 7 técnicas de desarrollo de contratos Uniswap para mejorar la eficiencia de los proyectos de Finanzas descentralizadas.

robot
Generación de resúmenes en curso

Técnicas de desarrollo de contratos inteligentes aprendidas del código de Uniswap

Recientemente, al redactar un tutorial de desarrollo de intercambios descentralizados, consulté la implementación del código de Uniswap V3 y aprendí muchas técnicas interesantes de desarrollo de contratos inteligentes. Como desarrollador que intenta desarrollar contratos DeFi por primera vez, estas técnicas serán de gran ayuda para los principiantes que quieran aprender sobre el desarrollo de contratos.

Web3 novato serie: pequeños consejos de desarrollo de contratos que aprendí del código de Uniswap

Dirección de contrato predecible

Normalmente, la dirección obtenida al desplegar un contrato parece aleatoria, ya que está relacionada con el nonce. Pero en ciertos escenarios, necesitamos deducir la dirección del contrato a través de la información de la transacción, como determinar los permisos de la transacción o obtener la dirección del pool.

Uniswap utiliza el método CREATE2 para crear contratos, añadiendo el parámetro salt para que la dirección sea predecible. La lógica de generación de la nueva dirección es: hash("0xFF", dirección del creador, salt, initcode). Este método permite que la dirección del contrato se calcule de antemano.

![Web3 novato serie: pequeños consejos de desarrollo de contratos que aprendí del código de Uniswap](https://img-cdn.gateio.im/webp-social/moments-0aaa61a4d43aba7fdeddbc55e3665305.webp01

Uso inteligente de funciones de retorno

Los contratos en Solidity pueden llamarse entre sí. En ciertos escenarios, el método A llama al B, y B, en el método llamado, hace una llamada de vuelta a A, este patrón es muy útil.

Por ejemplo, al intercambiar usando el método swap de Uniswap, se llamará a swapCallback, pasando la cantidad real de tokens necesarios. El llamador debe transferir los tokens en la devolución de llamada, en lugar de dividir el swap en dos llamadas. Esto asegura la ejecución completa del método swap, sin necesidad de registros de variables complicados para garantizar la seguridad.

Usar excepciones para transmitir información, estimar transacciones con try-catch

En el contrato Quoter de Uniswap, se ha utilizado un bloque try-catch para ejecutar el método swap de UniswapV3Pool. Esto es para simular el swap y estimar la cantidad de tokens necesarios, pero durante la estimación no se intercambian realmente los tokens, por lo que se producirá un error.

Uniswap lanza un error especial en la devolución de llamada de la transacción, luego captura ese error y extrae la información necesaria de él. Este método evita la necesidad de modificar el método de intercambio para estimar la demanda, lo que simplifica la lógica.

![Serie para principiantes de Web3: Consejos de desarrollo de contratos que aprendí del código de Uniswap])https://img-cdn.gateio.im/webp-social/moments-b0c3d4eb7e8ca88cc4cfc9476a34437a.webp(

La aritmética de grandes números resuelve problemas de precisión

En Uniswap se involucran muchos cálculos, como la cantidad de Token a intercambiar según el precio y la liquidez. Para evitar la pérdida de precisión en las operaciones de división, en el proceso de cálculo se utiliza comúnmente la operación << FixedPoint96.RESOLUTION, que equivale a un desplazamiento a la izquierda de 96 bits, es decir, multiplicar por 2^96.

Desplazando a la izquierda y luego realizando la división, se puede garantizar la precisión bajo la premisa de que no hay desbordamiento en las transacciones normales. Aunque teóricamente todavía hay una pequeña pérdida de precisión, ya es aceptable.

Cálculo de ganancias mediante Share

Uniswap necesita registrar los ingresos por comisiones de los proveedores de liquidez LP). Evidentemente, no se puede registrar la comisión para cada LP en cada transacción, ya que esto consumiría una gran cantidad de Gas.

La solución es registrar la tarifa total y la tarifa que debe asignarse por cada unidad de liquidez. Al retirar, las tarifas que se pueden retirar se calculan en función de la liquidez mantenida, similar a los dividendos de acciones.

Serie para principiantes de Web3: Consejos de desarrollo de contratos que aprendí del código de Uniswap

Diferenciar la información en cadena y fuera de cadena

Almacenamiento en la cadena es relativamente caro, no toda la información necesita estar en la cadena o ser obtenida de la cadena. Por ejemplo, muchas de las interfaces llamadas por el frontend de Uniswap son interfaces tradicionales de Web2.

La lista de pools de transacciones, información, etc. se puede almacenar en una base de datos normal, sincronizándose periódicamente desde la cadena. No es necesario llamar en tiempo real a la interfaz RPC para obtener datos relacionados. Por supuesto, las transacciones clave aún se realizan en la cadena.

División de contratos y reutilización de contratos estándar

Un proyecto puede contener múltiples contratos desplegados en la práctica. Incluso si se despliega solo un contrato, el código se puede dividir en múltiples contratos para su mantenimiento mediante la herencia.

Como el contrato NonfungiblePositionManager de Uniswap hereda varios contratos. El ERC721Permit utiliza directamente el contrato ERC721 de OpenZeppelin, lo que facilita la gestión de posiciones a través de NFTs y mejora la eficiencia del desarrollo.

Resumen

Desarrollar por uno mismo es más efectivo que simplemente leer artículos. Intentar implementar una versión simplificada de un intercambio descentralizado puede profundizar la comprensión de la implementación del código de Uniswap y aprender puntos de conocimiento de proyectos reales.

Serie para principiantes en Web3: pequeños consejos de desarrollo de contratos que aprendí del código de Uniswap

UNI4.79%
DEFI23.75%
Ver originales
Esta página puede contener contenido de terceros, que se proporciona únicamente con fines informativos (sin garantías ni declaraciones) y no debe considerarse como un respaldo por parte de Gate a las opiniones expresadas ni como asesoramiento financiero o profesional. Consulte el Descargo de responsabilidad para obtener más detalles.
  • Recompensa
  • 7
  • Compartir
Comentar
0/400
PoolJumpervip
· 07-28 02:11
Cero infraestructura, ¿qué tal?
Ver originalesResponder0
OldLeekConfessionvip
· 07-27 04:18
Si puedes hacer que lo entienda, ya será impresionante...
Ver originalesResponder0
OnchainGossipervip
· 07-27 03:51
Se recomienda practicar con operaciones reales~
Ver originalesResponder0
BagHolderTillRetirevip
· 07-25 17:02
Finalmente encontré una salida a mi situación de atrapado.
Ver originalesResponder0
PanicSeller69vip
· 07-25 17:00
¡V3 todavía tiene algo de calidad, adelante!
Ver originalesResponder0
degenonymousvip
· 07-25 16:58
Es el evangelio para los programadores.
Ver originalesResponder0
AirdropDreamBreakervip
· 07-25 16:56
Desarrollar no es tan bueno como robar código
Ver originalesResponder0
Opere con criptomonedas en cualquier momento y lugar
qrCode
Escanee para descargar la aplicación Gate
Comunidad
Español
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)