7 consejos prácticos para dominar el desarrollo de contratos inteligentes

robot
Generación de resúmenes en curso

Consejos ingeniosos en el desarrollo de contratos

Recientemente, al investigar el proceso de desarrollo de intercambios descentralizados, he consultado algunas implementaciones de código de proyectos conocidos y he aprendido muchos puntos interesantes. Como desarrollador que intenta por primera vez desarrollar contratos Defi, estos pequeños trucos son muy útiles para los novatos que quieren aprender el desarrollo de contratos.

Vamos a echar un vistazo a estos ingeniosos trucos, algunos de los cuales incluso podrían considerarse habilidades extraordinarias.

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

dirección de despliegue 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 transacciones equivalentes, como determinar los permisos de transacción o obtener la dirección del pool.

Una forma es usar CREATE2 para crear un contrato, agregando el parámetro salt: pool = address(new UniswapV3Pool{salt: keccak256(abi.encode(token0, token1, fee))}()); De esta manera, la dirección del contrato creada 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: trucos de desarrollo de contratos que aprendí del código de Uniswap

Uso inteligente de funciones de callback

En Solidity, los contratos pueden llamarse entre sí. Un patrón es que A llame al método de B, y B llame de vuelta a A en el método llamado, lo cual es muy útil en ciertos escenarios.

Por ejemplo, al llamar al método swap del contrato UniswapV3Pool para realizar un intercambio, se llamará a swapCallback, pasando el Token que se necesita para la transacción calculada. El llamador debe transferir el Token necesario para la transacción al UniswapV3Pool en la devolución de llamada, en lugar de dividir el método swap en dos partes. Esto asegura la seguridad y la ejecución completa del método swap, sin necesidad de registros de variables complicados.

utiliza excepciones para transmitir información, utiliza try catch para implementar la estimación de transacciones

En ciertos contratos, se logra la estimación de transacciones arrojando errores especiales en la función de callback de la transacción y luego capturando ese error para extraer la información necesaria del mensaje de error. Este método parece un atajo, pero es muy práctico, ya que no requiere modificar el método de swap para la estimación de la demanda de transacciones, lo que simplifica la lógica.

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

La gran cifra resuelve problemas de precisión

En escenarios que implican un gran volumen de cálculos, como calcular los tokens intercambiados según el precio actual y la liquidez, es necesario evitar la pérdida de precisión que puede surgir de las operaciones de división. Un método es utilizar la operación de desplazamiento a la izquierda, como << FixedPoint96.RESOLUTION, que equivale a multiplicar por 2^96. Después de desplazar a la izquierda, se realiza la operación de división, garantizando la precisión en condiciones normales de transacción sin desbordamientos.

Cálculo de ganancias por método de participación

Para los escenarios que requieren registrar los ingresos por tarifas de los proveedores de liquidez LP(, no se puede registrar la tarifa para cada LP en cada transacción, ya que esto consumiría una gran cantidad de Gas.

Una solución es registrar la tarifa total y la tarifa que debe asignarse a cada liquidez. Cuando los LP retiran tarifas, la tarifa que se puede retirar se calcula en función de la liquidez que poseen. Esto es similar al mecanismo por el cual los accionistas retiran dividendos.

![Serie para principiantes en Web3: pequeños trucos de desarrollo de contratos que aprendí del código de Uniswap])https://img-cdn.gateio.im/webp-social/moments-45e66af69435e6d4412ae506e77ab893.webp(

) Equilibrio en la obtención de información en cadena y fuera de cadena

No toda la información necesita ser obtenida de la cadena. Almacenar en la cadena es relativamente costoso, y mucha información puede almacenarse en bases de datos tradicionales, como listas de pools de transacciones, información de pools de transacciones, etc. Estos datos pueden sincronizarse periódicamente desde la cadena, sin necesidad de llamar en tiempo real a la interfaz RPC de la cadena o de los servicios de nodos.

Algunos proveedores de RPC de blockchain ofrecen interfaces avanzadas que permiten obtener ciertos datos de manera más rápida y económica. Estas interfaces suelen utilizar cachés para mejorar el rendimiento y la eficiencia.

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

Un proyecto puede incluir varios contratos desplegados en la práctica. Incluso si solo hay un contrato desplegado, el código puede dividirse en varios contratos para su mantenimiento mediante herencia.

Además, utilizar contratos estándar existentes, como ERC721, puede mejorar la eficiencia del desarrollo de contratos. Esto no solo facilita la gestión, sino que también permite aprovechar estándares consolidados para aumentar la velocidad y la seguridad del desarrollo.

resumen

La práctica de desarrollo práctico es la forma más efectiva de aprender a desarrollar contratos. Intentar implementar una versión simple de un intercambio descentralizado te permitirá comprender más a fondo la implementación del código de proyectos conocidos y también aprender más sobre puntos de conocimiento en proyectos reales. La práctica manual, estoy seguro de que te será de ayuda.

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

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
  • Republicar
  • Compartir
Comentar
0/400
ServantOfSatoshivip
· 08-12 16:04
Técnicas ingeniosas, ¿no se refiere a operaciones traviesas?
Ver originalesResponder0
mev_me_maybevip
· 08-11 22:32
¿Qué gran secreto descubrió el principiante en el café? Todo es solo un tema de conversación común.
Ver originalesResponder0
CommunityLurkervip
· 08-11 16:39
Novato es, ¿verdad? Te recomiendo que primero practiques un hello world.
Ver originalesResponder0
Blockwatcher9000vip
· 08-10 12:50
Decirlo de manera agradable es una habilidad, pero en realidad son diversas maniobras.
Ver originalesResponder0
OnChainDetectivevip
· 08-10 12:46
He estado investigando sobre el despliegue de create2 durante mucho tiempo. Esta técnica tiene que ser para colocar minas... los que entienden, entienden.
Ver originalesResponder0
ContractExplorervip
· 08-10 12:42
Descubrir una nueva vulnerabilidad es lo mejor. Corriendo contra la vulnerabilidad.
Ver originalesResponder0
  • Anclado
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)