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.
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).
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.
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.
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.
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.
22 me gusta
Recompensa
22
6
Compartir
Comentar
0/400
BagHolderTillRetire
· 07-08 01:52
El contrato me ha dejado con un gran dolor de cabeza.
Ver originalesResponder0
RugDocScientist
· 07-05 04:24
El hermano realmente sabe resumir.
Ver originalesResponder0
SeasonedInvestor
· 07-05 04:20
Jeje Novato amigable, si no puedes aprender, mejor no lo intentes.
Ver originalesResponder0
SatoshiLegend
· 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.
Siete trucos para el desarrollo de contratos de Uniswap Guía obligatoria para Novatos
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.
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).
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.
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.
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.