Compartiendo trucos para el desarrollo de contratos
Recientemente, al participar en un proyecto de desarrollo de un intercambio descentralizado, consulté la implementación de código de un DEX conocido y aprendí muchos trucos útiles para el desarrollo de contratos. Como desarrollador que anteriormente se centraba principalmente en contratos NFT, esta es mi primera vez intentando el desarrollo de contratos DeFi. Aquí comparto algunos pequeños trucos que podrían ser útiles para los nuevos desarrolladores.
Dirección 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 escenarios, necesitamos inferir la dirección del contrato a través de la información de la transacción, lo que es muy útil para determinar los permisos de la transacción o para obtener la dirección del pool.
Una forma es usar CREATE2 para crear un contrato, haciendo que la dirección generada sea predecible al agregar el parámetro salt. La fórmula para calcular la nueva dirección es:
Nueva dirección = hash("0xFF", dirección del creador, sal, initcode)
Uso inteligente de funciones de retorno
Los contratos en Solidity pueden llamarse entre sí. En ciertos escenarios, el método A llama al B, y B hace una llamada de retorno a A en el método llamado; este patrón es muy útil.
Por ejemplo, al realizar una transacción en un DEX, el método swap del contrato de pool llamará a swapCallback, pasando la cantidad real de tokens necesarios. El llamador debe transferir los tokens en la devolución de llamada, en lugar de dividir el swap en múltiples llamadas. Esto garantiza la integridad y seguridad del método swap.
Transmitir información mediante excepciones
En el código de un DEX, se utiliza un bloque try-catch para envolver el método swap del contrato del pool para simular transacciones y estimar los tokens necesarios. Dado que no se intercambian realmente los tokens durante la estimación, se generará un error. Al lanzar un error especial en el callback, y luego capturar y analizar la información del error, se puede obtener el resultado estimado.
Esta técnica evita la necesidad de modificar específicamente el método swap para estimar la demanda, manteniendo la lógica sencilla.
Problemas de precisión en el manejo de grandes números
Al calcular precios y liquidez, para evitar la pérdida de precisión en las operaciones de división, se puede desplazar a la izquierda 96 bits (, lo que equivale a multiplicar por 2^96) antes de realizar la operación. De esta manera, se puede garantizar la precisión siempre que las transacciones normales no desborden.
Cálculo de ingresos en modo Share
Al registrar las ganancias de las tarifas de los LP, no se puede registrar cada transacción para cada LP, ya que esto consumiría una gran cantidad de Gas. Una solución es registrar la tarifa total y la tarifa que debe ser asignada por cada unidad de liquidez. Al retirar los LP, se calculan las tarifas extraíbles en función de la liquidez mantenida, similar a los dividendos de acciones.
Combinación de datos en cadena y fuera de cadena
No toda la información necesita ser almacenada en la cadena o recuperada de la misma. Por ejemplo, la lista de piscinas, la información de las piscinas, etc., se pueden almacenar en una base de datos común y sincronizarse periódicamente desde la cadena. Esto puede mejorar el rendimiento y la eficiencia. Por supuesto, las transacciones clave aún deben llevarse a cabo en la cadena.
División y reutilización de contratos
Los grandes proyectos pueden incluir múltiples contratos realmente implementados. Incluso si solo se implementa un contrato, se puede dividir en múltiples contratos a través de la herencia para facilitar el mantenimiento. Al mismo tiempo, aprender a utilizar contratos estándar existentes como ERC721 puede mejorar la eficiencia del desarrollo.
La práctica es la mejor manera de aprender. Al implementar una versión simple de un DEX, se puede entender más profundamente la implementación del código de ciertos proyectos complejos y aprender más sobre los puntos de conocimiento en proyectos reales. Espero que estos pequeños consejos sean útiles para los principiantes que desean aprender desarrollo de contratos.
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.
20 me gusta
Recompensa
20
10
Republicar
Compartir
Comentar
0/400
DiamondHands
· 08-08 22:41
create2 moneda directa
Ver originalesResponder0
UnluckyMiner
· 08-07 07:50
Envía más fragmentos de código.
Ver originalesResponder0
BridgeJumper
· 08-07 04:50
Copiar también es un arte.
Ver originalesResponder0
nft_widow
· 08-06 21:36
Buena publicación, debe ser apoyada.
Ver originalesResponder0
LiquidityWizard
· 08-05 23:03
DIRECCIÓN预测很关键呢
Ver originalesResponder0
ImpermanentLossFan
· 08-05 23:01
Las letras son demasiado pocas, no son suficientes para ver.
Siete habilidades esenciales para el desarrollo de contratos DEX que todo Novato debe leer
Compartiendo trucos para el desarrollo de contratos
Recientemente, al participar en un proyecto de desarrollo de un intercambio descentralizado, consulté la implementación de código de un DEX conocido y aprendí muchos trucos útiles para el desarrollo de contratos. Como desarrollador que anteriormente se centraba principalmente en contratos NFT, esta es mi primera vez intentando el desarrollo de contratos DeFi. Aquí comparto algunos pequeños trucos que podrían ser útiles para los nuevos desarrolladores.
Dirección 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 escenarios, necesitamos inferir la dirección del contrato a través de la información de la transacción, lo que es muy útil para determinar los permisos de la transacción o para obtener la dirección del pool.
Una forma es usar CREATE2 para crear un contrato, haciendo que la dirección generada sea predecible al agregar el parámetro salt. La fórmula para calcular la nueva dirección es:
Nueva dirección = hash("0xFF", dirección del creador, sal, initcode)
Uso inteligente de funciones de retorno
Los contratos en Solidity pueden llamarse entre sí. En ciertos escenarios, el método A llama al B, y B hace una llamada de retorno a A en el método llamado; este patrón es muy útil.
Por ejemplo, al realizar una transacción en un DEX, el método swap del contrato de pool llamará a swapCallback, pasando la cantidad real de tokens necesarios. El llamador debe transferir los tokens en la devolución de llamada, en lugar de dividir el swap en múltiples llamadas. Esto garantiza la integridad y seguridad del método swap.
Transmitir información mediante excepciones
En el código de un DEX, se utiliza un bloque try-catch para envolver el método swap del contrato del pool para simular transacciones y estimar los tokens necesarios. Dado que no se intercambian realmente los tokens durante la estimación, se generará un error. Al lanzar un error especial en el callback, y luego capturar y analizar la información del error, se puede obtener el resultado estimado.
Esta técnica evita la necesidad de modificar específicamente el método swap para estimar la demanda, manteniendo la lógica sencilla.
Problemas de precisión en el manejo de grandes números
Al calcular precios y liquidez, para evitar la pérdida de precisión en las operaciones de división, se puede desplazar a la izquierda 96 bits (, lo que equivale a multiplicar por 2^96) antes de realizar la operación. De esta manera, se puede garantizar la precisión siempre que las transacciones normales no desborden.
Cálculo de ingresos en modo Share
Al registrar las ganancias de las tarifas de los LP, no se puede registrar cada transacción para cada LP, ya que esto consumiría una gran cantidad de Gas. Una solución es registrar la tarifa total y la tarifa que debe ser asignada por cada unidad de liquidez. Al retirar los LP, se calculan las tarifas extraíbles en función de la liquidez mantenida, similar a los dividendos de acciones.
Combinación de datos en cadena y fuera de cadena
No toda la información necesita ser almacenada en la cadena o recuperada de la misma. Por ejemplo, la lista de piscinas, la información de las piscinas, etc., se pueden almacenar en una base de datos común y sincronizarse periódicamente desde la cadena. Esto puede mejorar el rendimiento y la eficiencia. Por supuesto, las transacciones clave aún deben llevarse a cabo en la cadena.
División y reutilización de contratos
Los grandes proyectos pueden incluir múltiples contratos realmente implementados. Incluso si solo se implementa un contrato, se puede dividir en múltiples contratos a través de la herencia para facilitar el mantenimiento. Al mismo tiempo, aprender a utilizar contratos estándar existentes como ERC721 puede mejorar la eficiencia del desarrollo.
La práctica es la mejor manera de aprender. Al implementar una versión simple de un DEX, se puede entender más profundamente la implementación del código de ciertos proyectos complejos y aprender más sobre los puntos de conocimiento en proyectos reales. Espero que estos pequeños consejos sean útiles para los principiantes que desean aprender desarrollo de contratos.