¿Qué bibliotecas matemáticas de punto fijo o flotante están disponibles en Solidity?

La solidez no tiene tipos de punto fijo, punto flotante o doble. ¿Qué soluciones existen para manejar los casos en los que realmente tenemos que representar números como porcentajes o fracciones?

Respuestas (1)

Descargo de responsabilidad: soy el autor de PRBMath.

Punto fijo

  1. PRBMatemáticas
    • números de denario con y sin signo con 18 decimales de precisión
    • ofrece funciones matemáticas avanzadas (logs, exp, pow, etc.)
    • proporciona seguridad de tipos a través de tipos de valores definidos por el usuario
    • eficiente en gas, pero aún fácil de usar
    • experiencia de desarrollador ergonómica gracias al uso de funciones gratuitas en lugar de bibliotecas
  2. ABDKMatemáticas64x64
    • números binarios con precisión 2^64
    • ofrece funciones matemáticas avanzadas (logs, exp, pow, etc.)
    • ultra eficiente en gas (ver este elogio )
  3. fijeza
    • números de denario con un número arbitrario de decimales
    • ofrece funciones matemáticas avanzadas (logs, exp, pow, etc.)
    • más lento que 64.64, pero con una API más aceptable
    • utilizado por CementDAO, PoolTogether y Celo
  4. Exponencial
    • números de denario con 18 decimales de precisión
    • características mínimas, no ofrece funciones matemáticas avanzadas
    • desarrollado por Compound.Finance
  5. DecimalMath
    • números de denario con 27 decimales de precisión
    • características mínimas, no ofrece funciones matemáticas avanzadas
    • utiliza ABIEncoderV2 (experimental en Solidity 0.7 y versiones anteriores)
  6. DSMath
    • números de denario con 18 (WAD) y 27 decimales de precisión (RAY)
    • características mínimas, no ofrece funciones matemáticas avanzadas
    • desarrollado por el equipo DappHub , utilizado por el protocolo Maker

Punto flotante

  1. ABDKMatemáticasQuad
    • desarrollado por la misma empresa que 64.64
  2. Bankex
    • Punto flotante de precisión óctuple IEEE-754

Adenda

  1. Hay un problema abierto en el repositorio de solidity para agregar soporte nativo para tipos de punto fijo
  2. La serie de blogs Math in Solidity de Mikhail Vladimirov es un recurso fantástico para aprender cómo se pueden implementar funciones matemáticas avanzadas en Solidity v0.6 y versiones anteriores.
  3. Hay más bibliotecas matemáticas mencionadas en esta publicación del foro de OpenZeppelin
Olvidó el método más simple (y más preciso): mantenga una tupla de numerador y denominador, y en cada cálculo, evite la división por el mayor tiempo posible (es decir, utilícela solo para evitar un desbordamiento).
Eso es cierto, pero diría que el enfoque más simple de las matemáticas de punto fijo en solidez también es el más frágil.
Tuve que google-translate brittlest, lo que me dio: having hardness and rigidity but little tensile strength. Ahora tengo que traducir en Google casi todas las palabras en eso...
Ja, lo que quise decir es que no alentaría un enfoque simple cuando se trata de puntos fijos. Siempre hay algo que podría salir mal, y prefiero confiar en otros contratos más sólidos (¡y pruebas!) que la gente escribió antes que yo.