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.
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)
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(.
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:
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(
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
5
Republicar
Compartir
Comentar
0/400
LayerZeroEnjoyer
· 08-01 16:48
¿Y todavía estudian defi cuando el BTC ya se ha acabado?
Ver originalesResponder0
degenwhisperer
· 08-01 00:26
Copia directamente el código de uni.
Ver originalesResponder0
GateUser-40edb63b
· 07-29 21:17
Este gancho de contratos inteligentes es muy avanzado.
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.
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)
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(