7 consejos prácticos para aprender el desarrollo de contratos DEX en tendencia

Compartiendo pequeños consejos para el desarrollo de contratos: experiencias aprendidas de Uniswap

Recientemente, al desarrollar un proyecto de intercambio descentralizado, hice referencia a la implementación de código de un conocido DEX y aprendí muchos puntos útiles. Como un principiante que acaba de entrar 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 inteligentes.

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

Dirección de contrato predecible

Las direcciones de los contratos desplegados suelen parecer aleatorias, ya que están relacionadas con el nonce. Sin embargo, en ciertos escenarios, necesitamos inferir la dirección del contrato a través de la información de la transacción, como para determinar los permisos de la transacción o para obtener la dirección del grupo de liquidez.

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

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

La dirección del contrato generada de esta manera es predecible y sigue la siguiente lógica:

Nueva dirección = hash("0xFF", dirección del creador, sal, 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

Uso razonable de las funciones de callback

En ciertos escenarios, la llamada recíproca entre contratos es muy útil. Por ejemplo, el método A llama al B, y B llama de vuelta al A en el método que fue invocado.

En un DEX determinado, al llamar al método swap para realizar una transacción, este llamará a swapCallback, pasando el Token necesario calculado para la transacción actual. La parte que llama debe transferir el Token requerido al pool de transacciones en la devolución de llamada, en lugar de dividir el método swap. Esto asegura la ejecución completa del método swap, sin necesidad de complicadas registraciones de variables para garantizar la seguridad.

Utilizar excepciones para transmitir información

Al estimar el comercio, necesitamos simular el método swap, pero no intercambiaremos realmente los Tokens, por lo que se producirá un error. Un DEX logra la estimación lanzando un error especial en la función de callback de la transacción, y luego captura ese error y extrae la información necesaria.

Este método parece un atajo, pero es muy práctico. No es necesario modificar el método swap para estimar la demanda, la lógica es más simple.

![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(

Uso de grandes números para resolver problemas de precisión

En el código relacionado con cálculos, se debe evitar la pérdida de precisión en las operaciones de división. Un DEX a menudo utiliza la operación "<< FixedPoint96.RESOLUTION", que equivale a multiplicar por 2^96. Al desplazar a la izquierda y luego realizar la división, se puede garantizar la precisión sin desbordamiento.

solidez uint256 numerator1 = uint256)liquidity( << FixedPoint96.RESOLUTION; uint256 numerator2 = sqrtRatioBX96 - sqrtRatioAX96; amount0 = numerator1 * numerator2 / )sqrtRatioBX96 * sqrtRatioAX96(;

Aunque teóricamente todavía puede haber pérdida de precisión, generalmente solo se trata de una pérdida de la unidad mínima, que es aceptable.

Cálculo de beneficios mediante el método de participación

Para el cálculo de los ingresos por comisiones de los proveedores de liquidez )LP(, no se puede registrar cada transacción, ya que esto consumiría una gran cantidad de Gas. Un DEX adopta un método que registra la comisión total y la forma en que se deben asignar las comisiones a cada liquidez.

Al extraer tarifas de LP, el monto que se puede extraer se calcula en función de la liquidez que se posee. Es similar a tener acciones de una empresa; al retirar ganancias, solo se necesita conocer el rendimiento histórico por acción y las ganancias de la última extracció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-45e66af69435e6d4412ae506e77ab893.webp(

Elección razonable del método de obtención de información

El almacenamiento en la cadena es relativamente costoso, no toda la información necesita estar en la cadena o recuperarse de la cadena. Por ejemplo, listas de piscinas de transacciones e información pueden almacenarse en bases de datos normales y sincronizarse periódicamente desde la cadena.

Algunos proveedores de RPC de blockchain ofrecen interfaces avanzadas, lo que permite obtener datos de manera más rápida. Pero las transacciones clave aún deben realizarse en la cadena.

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

Un proyecto puede contener múltiples contratos, incluso si se despliega un solo contrato, se puede dividir en múltiples contratos a través de la herencia para su mantenimiento.

El contrato de gestión de posiciones de NFT de un DEX hereda de varios contratos:

solidez el contrato NonfungiblePositionManager es INonfungiblePositionManager, Multicall, PeripheryImmutableState, PoolInitializer, GestiónDeLiquidez, ValidaciónPeriférica, SelfPermit, ERC721Permit {...}

Al mismo tiempo, también utiliza el contrato estándar ERC721 de OpenZeppelin, lo que facilita la gestión de posiciones y mejora la eficiencia del desarrollo.

Resumen

Desarrollar un intercambio descentralizado básico por tu cuenta te permitirá entender más a fondo la implementación del código de proyectos maduros y aprender más puntos de conocimiento práctico. Espero que estos pequeños consejos te inspiren, ¡te deseo éxito en el desarrollo!

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

UNI3.4%
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
NFTArchaeologisvip
· hace9h
El aprendizaje a ciegas también es una forma de estudiar.
Ver originalesResponder0
OnlyOnMainnetvip
· 08-05 15:56
No olvides la práctica en el Testnet.
Ver originalesResponder0
TokenGuruvip
· 08-05 15:55
El código fuente se explica de manera muy clara.
Ver originalesResponder0
BlockchainTherapistvip
· 08-05 15:49
La técnica es buena y muy práctica.
Ver originalesResponder0
TaxEvadervip
· 08-05 15:40
CREATE2 es realmente bueno, amigo
Ver originalesResponder0
SchroedingerGasvip
· 08-05 15:32
Hoy el gas está muy barato
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)