Siete trucos para el desarrollo de contratos de Uniswap Guía obligatoria para Novatos

robot
Generación de resúmenes en curso

Guía para Novatos en Web3: Compartiendo técnicas de desarrollo de contratos de Uniswap

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

Web3 Novato系列:Lo que aprendí sobre el desarrollo de contratos a partir del código de Uniswap

Dirección de implementación de contrato predecible

Las direcciones de contrato desplegadas normalmente parecen aleatorias, debido a su relación con el nonce. Sin embargo, en ciertos casos, necesitamos inferir la dirección del contrato a través de los pares de intercambio y la información relacionada. Uniswap utiliza el método CREATE2 para crear contratos, añadiendo un parámetro salt que hace que la dirección generada sea predecible. La lógica para la generación de nuevas direcciones es: hash("0xFF", dirección del creador, salt, initcode).

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

Uso inteligente de funciones de callback

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

Utilizando excepciones para transmitir información

Al estimar una transacción, algunas plataformas envuelven la ejecución del método swap en un try catch. Dado que la estimación no genera un intercambio real de Token, se producirá un error. Al lanzar un error especial en la función de retorno de llamada y luego capturar y analizar el mensaje de error, se puede obtener la información necesaria. Este método evita la necesidad de modificar el método swap para la transacción de estimación.

Garantía de precisión en operaciones con grandes números

Al calcular precios y liquidez, para evitar la pérdida de precisión causada por las operaciones de división, se puede utilizar la operación de desplazamiento a la izquierda (equivalente a multiplicar por 2^96). De esta manera, se puede garantizar la precisión en condiciones normales de negociación sin desbordamientos. Aunque teóricamente aún existe una pequeña pérdida de precisión, ya es aceptable.

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

Cálculo de beneficios del mecanismo Share

Para ahorrar en el consumo de Gas, no se puede registrar la tarifa de transacción para cada proveedor de liquidez en cada operación. Se puede registrar la tarifa total y la tarifa que debe asignarse a cada liquidez, y al retirar LP, se calcula la tarifa que se puede retirar según la liquidez poseída. Esto es similar al mecanismo de dividendos de acciones.

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

Uso razonable de datos fuera de la cadena

No toda la información necesita ser obtenida de la cadena. Por ejemplo, la lista de pools de transacciones y la información de pools de transacciones se pueden almacenar en bases de datos tradicionales y sincronizarse periódicamente desde la cadena. Algunos proveedores de RPC de blockchain ofrecen interfaces avanzadas que permiten obtener datos de manera más rápida y económica.

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

El proyecto puede incluir múltiples contratos implementados en la práctica, o dividir un solo contrato en varios mediante herencia. Utilizar contratos estándar existentes (como ERC721) puede aumentar la eficiencia del desarrollo. Por ejemplo, algunas plataformas utilizan contratos ERC721 para gestionar posiciones, lo que facilita la gestión y mejora la eficiencia del desarrollo.

La práctica es el mejor método de aprendizaje. Intentar implementar una versión sencilla de un intercambio descentralizado puede profundizar la comprensión de la implementación del código de los DEX más utilizados y aprender más sobre los puntos de conocimiento en proyectos prácticos. Se sugiere que los desarrolladores interesados consulten cursos de código abierto relacionados y completen el desarrollo de una versión sencilla del intercambio paso a paso.

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

UNI3.77%
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
BagHolderTillRetirevip
· 07-08 01:52
El contrato me ha dejado con un gran dolor de cabeza.
Ver originalesResponder0
RugDocScientistvip
· 07-05 04:24
El hermano realmente sabe resumir.
Ver originalesResponder0
SeasonedInvestorvip
· 07-05 04:20
Jeje Novato amigable, si no puedes aprender, mejor no lo intentes.
Ver originalesResponder0
SatoshiLegendvip
· 07-05 04:17
Los detalles técnicos no son del todo completos, aún existen múltiples vulnerabilidades en el nivel de trazabilidad... se sugiere consultar el código fuente de v2.
Ver originalesResponder0
governance_ghostvip
· 07-05 04:03
perspectivas valiosas收藏 后面学习用
Ver originalesResponder0
UnluckyValidatorvip
· 07-05 04:00
No puedo soportar tantos detalles.
Ver originalesResponder0
  • Anclado
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)