7 consejos prácticos de desarrollo de contratos para impulsar proyectos DEX

Resumen de pequeños consejos para el desarrollo de contratos

Recientemente, al desarrollar un intercambio descentralizado, hice referencia a la implementación del código de un conocido DEX y aprendí muchas técnicas útiles para el desarrollo de contratos. Como un principiante que recién comienza en el desarrollo de contratos DeFi, estas técnicas me han inspirado mucho y creo que también serán útiles para otros amigos que quieran aprender sobre el desarrollo de contratos.

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

Dirección de contrato predecible

Por lo general, la dirección obtenida al desplegar un contrato parece aleatoria y es difícil de predecir. Sin embargo, en ciertos escenarios, necesitamos inferir la dirección del contrato a través de información equivalente de la transacción, como determinar los permisos de la transacción o obtener la dirección del pool.

Esto se puede lograr utilizando el método CREATE2 para crear un contrato. La forma específica es agregar el parámetro salt al crear el contrato:

solidez pool = address(nuevo UniswapV3Pool{salt: keccak256(abi.encode(token0, token1, fee))}());

La dirección del contrato creada de esta manera es predecible, y la lógica de generación es:

Nueva dirección = hash("0xFF", dirección del creador, salt, initcode)

![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-0aaa61a4d43aba7fdeddbc55e3665305.webp01

Utilizando funciones de devolución de llamada

En ciertos escenarios, la llamada mutua entre contratos es muy útil. Por ejemplo, A llama al método de B, y B hace una llamada de retorno a A en el método que fue llamado.

Tomando como ejemplo una transacción, cuando se invoca el método swap del contrato de la piscina, se llamará a swapCallback, pasando la cantidad real de Token requerida calculada. La parte que realiza la llamada debe transferir el Token al contrato de la piscina en la devolución de llamada, lo que garantiza la ejecución completa y la seguridad del método swap, sin necesidad de registros de variables complicados.

Pasar información mediante excepciones

Al estimar una transacción, necesitamos simular el método de swap pero no intercambiar realmente los Tokens. Se puede lanzar un error especial en la función de callback de la transacción, y luego capturar ese error y extraer la información necesaria.

Este método parece un atajo, pero es muy práctico. No es necesario modificar el método de swap específicamente para estimar transacciones, la lógica es más sencilla.

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

Solución de problemas de precisión con números grandes

Al calcular precios y liquidez, para evitar la pérdida de precisión en las operaciones de división, se puede utilizar la operación de desplazamiento a la izquierda ) que equivale a multiplicar por 2^96(.

Por ejemplo:

solidez numerator1 = FullMath.mulDiv)liquidity << FixedPoint96.RESOLUTION, sqrtRatioBX96 - sqrtRatioAX96, sqrtRatioBX96(;

Esto puede garantizar la precisión sin desbordamiento en 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

Para evitar registrar la tarifa de transacción para todos los LP en cada operación, se puede utilizar el método Share.

Solo necesitas registrar la tarifa total y la tarifa que debe asignarse a cada liquidez. Al retirar LP, las tarifas que se pueden retirar se calculan según la liquidez que se posee, similar a los dividendos de acciones.

![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 datos fuera de la cadena

No toda la información necesita ser almacenada en la cadena o recuperada de ella. Por ejemplo, listas de grupos de transacciones, información básica, etc., pueden almacenarse en una base de datos normal y sincronizarse periódicamente.

Algunas interfaces RPC avanzadas también ofrecen una forma de obtención de datos optimizada mediante caché, lo que puede mejorar el rendimiento y la eficiencia.

División y reutilización de contratos

Los grandes proyectos se pueden dividir en múltiples contratos que se implementan en la práctica, o se pueden dividir en varios contratos de mantenimiento mediante la herencia.

Al mismo tiempo, se pueden reutilizar contratos estándar existentes como ERC721, lo que mejora la eficiencia del desarrollo. Por ejemplo:

solidez contrato NonfungiblePositionManager es INonfungiblePositionManager, PeripheryImmutableState, PoolInitializer, GestiónDeLiquidez, PeripheryValidation, Multicall, ERC721Permit, PeripheryPayments, NFTDescriptor { // ... }

Estudiar la implementación del código de proyectos destacados y tratar de desarrollarlo tú mismo te permitirá tener una comprensión más profunda de los intercambios descentralizados. ¡Espero que estos pequeños consejos te ayuden en el desarrollo de tus contratos!

![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-5.13%
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
  • 5
  • Republicar
  • Compartir
Comentar
0/400
LayerZeroEnjoyervip
· 08-01 16:48
¿Y todavía estudian defi cuando el BTC ya se ha acabado?
Ver originalesResponder0
degenwhisperervip
· 08-01 00:26
Copia directamente el código de uni.
Ver originalesResponder0
GateUser-40edb63bvip
· 07-29 21:17
Este gancho de contratos inteligentes es muy avanzado.
Ver originalesResponder0
PoetryOnChainvip
· 07-29 21:03
En realidad, es copiar a uni...
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)