Desentrañando el código de Uniswap: 7 técnicas de desarrollo de contratos inteligentes explicadas en detalle

robot
Generación de resúmenes en curso

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

Recientemente, al escribir un tutorial de desarrollo de un intercambio descentralizado, me referí a la implementación del código de Uniswap V3 y aprendí muchos puntos valiosos. Como desarrollador que intenta por primera vez desarrollar contratos de Defi, estas técnicas serán muy útiles para los principiantes que desean aprender sobre el desarrollo de contratos.

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

Dirección de despliegue de contrato predecible

Normalmente, la dirección obtenida al desplegar un contrato parece aleatoria, ya que está relacionada con el nonce. Sin embargo, en ciertos casos, necesitamos deducir la dirección del contrato a través de pares de intercambio e información relacionada. Uniswap utiliza el método CREATE2 para crear contratos, añadiendo el parámetro salt, lo que hace que la dirección del contrato generado sea predecible. La lógica de generación de direcciones es: nueva dirección = hash("0xFF", dirección del creador, salt, initcode).

![Serie para principiantes de Web3: 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

En ciertos escenarios, la llamada y devolución mutua entre contratos es muy útil. Por ejemplo, en el método swap de Uniswap, se llama a swapCallback, pasando la cantidad real de Tokens necesarios. El llamador debe transferir los Tokens requeridos al fondo en la devolución, asegurando la integridad y seguridad de toda la lógica de la transacción.

Utilizar la transmisión de información anómala, estimar la transacción con try catch

En el contrato Quoter de Uniswap, se utiliza un bloque try catch para ejecutar el método swap y estimar la transacción. Al lanzar un error especial en la función de callback y luego capturar y analizar la información del error, se logra la funcionalidad de estimación de transacciones sin necesidad de modificar especialmente el método swap para la demanda de estimación.

La gran cantidad resuelve el problema de precisión

La lógica de cálculo en Uniswap utiliza frecuentemente una operación de desplazamiento a la izquierda de 96 bits (equivalente a multiplicar por 2^96). Este método garantiza que las transacciones normales no se desborden y también asegura la precisión. Aunque teóricamente aún existe una pequeña pérdida de precisión, en la práctica es aceptable.

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

Cálculo de beneficios del mecanismo de compartir

Para registrar de manera eficiente los ingresos por tarifas de los LP, Uniswap adoptó un método similar al de las acciones. Al registrar la tarifa total y las tarifas que deben asignarse por cada unidad de liquidez, los LP solo necesitan calcular las tarifas extraíbles en función de la liquidez que poseen al momento de la extracción, lo que reduce significativamente el consumo de gas.

![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-45e66af69435e6d4412ae506e77ab893.webp(

Uso razonable de la información fuera de la cadena

Teniendo en cuenta el alto costo del almacenamiento en la cadena, no toda la información necesita estar en la cadena o recuperarse de ella. Por ejemplo, la lista de transacciones en el pool, la información del pool, etc., se pueden almacenar en bases de datos tradicionales, sincronizándose periódicamente con los datos de la cadena. Este método puede mejorar la eficiencia y reducir costos.

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

Un proyecto puede incluir múltiples contratos realmente desplegados. Incluso si solo se despliega un contrato, se puede dividir el código en múltiples contratos mediante la herencia. Al mismo tiempo, el uso de contratos estándar existentes (como ERC721) puede aumentar la eficiencia del desarrollo y mejorar la fiabilidad del contrato.

Conclusión

La práctica es el mejor método de aprendizaje. Al intentar implementar una versión simplificada de un intercambio descentralizado, se puede comprender más profundamente la implementación del código de Uniswap y aprender valiosas experiencias de proyectos reales. Para los desarrolladores interesados en profundizar en el desarrollo de proyectos Web3 y DeFi, participar en un curso práctico será una excelente opción.

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

UNI-0.31%
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
  • 6
  • Compartir
Comentar
0/400
GateUser-9ad11037vip
· hace13h
Tutorial de introducción una posición para novatos
Ver originalesResponder0
WalletManagervip
· hace13h
La rigurosa auditoría previa al contrato es la ingeniería de cimientos... Aprende un poco de impulso.
Ver originalesResponder0
SmartContractRebelvip
· hace13h
El desarrollador está viviendo de las rentas.
Ver originalesResponder0
GateUser-a606bf0cvip
· hace13h
¿Eso es todo? Demasiado básico, ¿no?
Ver originalesResponder0
BlockchainBouncervip
· hace13h
No entiendo cómo se escapa tan rápido.
Ver originalesResponder0
GasGuzzlervip
· hace13h
Aunque lo repita diez veces, no sabré escribirlo.
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)