Miré el código que estaba mal con Cetus anoche, y lo primero que sospeché mucho get_delta_b fue por qué esta función convertiría u256 en u64, lo que causó el problema de intercepción de precisión. Después de preguntarle a la IA, es probable que cuando cetus migró todas las fórmulas de uniswap v3, debido a que uni usa un punto fijo, deba convertirse en un número de punto flotante sin una cuidadosa consideración de seguridad. Este tipo de lógica empresarial, que pertenece al nivel del algoritmo, es difícil de detectar en las auditorías de código, a menos que la institución auditora también cuente con investigadores que estén familiarizados tanto con los algoritmos como con el código. Esta es la lógica de por qué la IA analiza el código de la manera en que lo hace:
Basándome en mi análisis del código base, ahora puedo explicar por qué el autor eligió implementarlo de esta manera
get_delta_b
Funciones y posibles causas:
Por qué el autor de la función implementa de get_delta_b manera
Optimización del rendimiento: ) y bitmask manejan directamente los tipos U256. Lo más probable es que esto mejore el rendimiento y reduzca la sobrecarga computacional. En las aplicaciones DeFi, especialmente en los escenarios de trading de alta frecuencia, el rendimiento es fundamental.
El código comentado usa u256::get
,u256::shrw
Mientras que la implementación actual utiliza operaciones de bits (>> 64
Ahorre tarifas de gas: Las operaciones en la cadena de bloques Sui deben pagar tarifas de gas, y las operaciones más complejas consumirán más gas. La simplificación de las matemáticas puede reducir los costos de transacción, especialmente para las funciones principales de AMM que se operan con frecuencia.
Dependencias reducidas: las funciones del módulo y la implementación actual reducen las llamadas a estas funciones, tal vez para reducir las dependencias de bibliotecas externas o para evitar problemas con algunas funciones externas.
El código en los comentarios usa más u256
Portabilidad de Solidity a Move: En términos de estilo de código, esto podría ser una portabilidad del código Solidity de Ethereum al lenguaje Move de Sui. Este uso de la manipulación y el enmascaramiento de bits es común en Solidity, especialmente en implementaciones de AMM como Uniswap V3.
Tratar con matemáticas de punto fijo: el resultado resultante de 256 bits debe procesarse correctamente, y desplazar 64 bits a la derecha es una forma común de obtener la posición correcta del punto decimal.
Las matemáticas de punto fijo se utilizan a menudo en los AMM para tratar con valores decimales. full_math_u128::full_mul
Problemas potenciales
Sin embargo, esta implementación presenta varios problemas:
Mala legibilidad del código: el uso de máscaras codificadas de forma rígida y operaciones de desplazamiento hace que el código sea difícil de entender y auditar.
Falta de comprobación de límites completos: las operaciones de bits y las operaciones de conversión de tipos carecen de una comprobación completa de límites, lo que puede provocar un comportamiento inesperado en casos extremos.
El código comentado coexiste con el código de implementación: mantener versiones anteriores del código comentado indica que el código puede estar en un estado transitorio o no haberse probado adecuadamente, lo que es peligroso para el código crítico que trata con activos financieros.
Riesgo de desbordamiento de enteros: cuando se trata de valores grandes, las operaciones y transformaciones de bits pueden provocar un desbordamiento de enteros, y las implementaciones simplificadas pueden carecer de mecanismos de protección adecuados.
resumen
Es probable que la razón principal del autor para implementar este código sea optimizar el rendimiento y reducir los costos de gas, mientras maneja cálculos matemáticos de punto fijo en AMM. Sin embargo, esta optimización, a expensas de la seguridad y la legibilidad del código, puede proporcionar a los atacantes vulnerabilidades explotables, como puede ver en el incidente de robo de Cetus que proporcionó.
En los proyectos DeFi, la seguridad siempre debe tener prioridad sobre la optimización del rendimiento, especialmente para las funciones principales que manejan los activos de los usuarios. Es mejor utilizar funciones de biblioteca probadas, agregar comprobaciones exhaustivas de límites y realizar auditorías de seguridad adecuadas.
Mostrar original26
43.4 k
El contenido al que estás accediendo se ofrece por terceros. A menos que se indique lo contrario, OKX no es autor de la información y no reclama ningún derecho de autor sobre los materiales. El contenido solo se proporciona con fines informativos y no representa las opiniones de OKX. No pretende ser un respaldo de ningún tipo y no debe ser considerado como un consejo de inversión o una solicitud para comprar o vender activos digitales. En la medida en que la IA generativa se utiliza para proporcionar resúmenes u otra información, dicho contenido generado por IA puede ser inexacto o incoherente. Lee el artículo enlazado para más detalles e información. OKX no es responsable del contenido alojado en sitios de terceros. Los holdings de activos digitales, incluidos stablecoins y NFT, suponen un alto nivel de riesgo y pueden fluctuar mucho. Debes considerar cuidadosamente si el trading o holding de activos digitales es adecuado para ti según tu situación financiera.