Decimales ERC-20: de las unidades base a la cantidad mostrada

El campo decimals de un token ERC-20 indica cómo convertir una cantidad entera de unidades base en el importe que ve una persona. La relación consiste en dividir esa cantidad entre diez elevado al número de decimales. Para interpretar el resultado hace falta conocer el valor correspondiente al token concreto: no basta con utilizar el de otro token o el de un ejemplo conocido.

Conviene separar dos preguntas: ¿el token proporciona este metadato opcional? Y, si lo proporciona, ¿qué valor utiliza? El valor predeterminado de OpenZeppelin explica una implementación, pero no responde por todos los tokens ERC-20. Los números del ejemplo siguiente son inventados y solo sirven para entender la conversión.

Qué significa decimals en ERC-20

El estándar EIP-20 describe decimals() como el método que devuelve el número de decimales utilizado para obtener la representación de una cantidad destinada al usuario. También establece que es opcional: las interfaces y otros contratos no deben dar por hecho que esté disponible.

Esta condición importa al leer cualquier explicación sobre decimales. Una fórmula puede estar bien escrita y, aun así, carecer de un dato necesario para aplicarla a un token determinado. Si no se ha establecido su escala, calcular con un valor supuesto no resuelve esa incertidumbre.

Piensa en dos formas de expresar una misma cantidad: el recuento entero de unidades base y la cifra ajustada que se presenta al lector. El metadato decimals aporta la escala que relaciona ambas. Por eso resulta útil conservar juntos el entero original y el número de decimales, en lugar de tratar una cifra formateada como si se explicara por sí sola.

Unidades enteras y cantidades mostradas

La guía de ERC-20 de OpenZeppelin explica este sistema mediante cantidades enteras. En la contabilidad descrita, los cálculos del contrato siguen realizándose con enteros. Las interfaces, como las carteras, son las encargadas de ajustar la cantidad mostrada según los decimales.

La relación puede escribirse así: cantidad mostrada = unidades base / (10 ** decimals). En esta notación, 10 ** decimals significa diez elevado al número de decimales. Ese resultado es el divisor que permite pasar del recuento de unidades base a su representación.

La presencia de una coma decimal en pantalla no significa que la contabilidad descrita haya empezado a utilizar fracciones de unidades base. La cifra visible procede de aplicar una escala al entero. Mantener esa distinción evita confundir el dato utilizado en los cálculos con su presentación.

Además, que una interfaz tenga la responsabilidad de aplicar el ajuste no demuestra que una interfaz concreta lo haya hecho correctamente. Para revisar una conversión, busca sus dos entradas: el entero original y los decimales utilizados. Sin ellas, el origen de la cifra mostrada queda incompleto.

Un ejemplo hipotético paso a paso

Supongamos que un token inventado tiene 4 decimales y que una cuenta ficticia posee 1234500 unidades base. Son supuestos didácticos: no describen un token desplegado, un saldo real ni una transacción realizada.

  1. Tomamos el número de decimales del supuesto: 4.
  2. Calculamos la escala: 10 ** 4 = 10000.
  3. Dividimos el entero entre esa escala: 1234500 / 10000 = 123,45.
  4. Expresamos el resultado como 123,45 tokens mostrados y conservamos 1234500 como cantidad de unidades base.

El resultado es una deducción de la fórmula y de los datos hipotéticos. No es un saldo consultado. Las dos cifras describen la misma cantidad del ejemplo con escalas distintas; al presentarlas juntas se puede revisar la relación entre ellas.

Cómo comprobar la conversión inversa

Si despejamos algebraicamente la fórmula anterior, obtenemos unidades base = cantidad mostrada * (10 ** decimals). En el ejemplo, multiplicar 123,45 por 10000 devuelve 1234500.

Esta comprobación también tiene un límite que se deduce de la contabilidad con enteros: para que la conversión inversa sea exacta, el resultado debe ser un número entero de unidades base. La multiplicación sirve para revisar la representación; no constituye una instrucción de envío ni demuestra que una operación vaya a ejecutarse correctamente.

Por qué los 18 decimales de OpenZeppelin no son universales

La referencia de ERC20 de OpenZeppelin Contracts 5.x documenta un valor predeterminado de 18 decimales. También explica que un contrato derivado puede redefinir la función para devolver otro valor.

Ambos datos deben leerse juntos. El 18 pertenece a esa implementación predeterminada; la posibilidad de redefinir la función describe una personalización del contrato. No implica que una persona pueda cambiar los decimales de cualquier token ya desplegado mediante un ajuste de su cartera.

De estas premisas se deduce una conclusión limitada pero útil: como EIP-20 hace opcional el método y OpenZeppelin permite redefinir su valor predeterminado, la etiqueta ERC-20 por sí sola no establece ni la disponibilidad de decimals() ni un valor de 18. Esta deducción no identifica los metadatos de ningún contrato particular.

Al revisar una explicación sobre un token, comprueba si el valor citado corresponde a ese token o si procede únicamente de documentación general. Un ejemplo de biblioteca ayuda a entender el mecanismo, pero no sustituye el dato que necesita la conversión concreta.

Qué cambia la representación y qué queda fuera

La referencia de OpenZeppelin indica que decimals se utiliza para la presentación y no afecta a la aritmética de su implementación, incluidas balanceOf y transfer. Aplicar un divisor para interpretar una cantidad no actualiza por sí mismo el saldo ni ejecuta una transferencia.

En el ejemplo hipotético, el cálculo permite expresar el entero de una forma más fácil de leer. La entrada sigue siendo 1234500 unidades base. Esta explicación se limita a la relación de escala documentada y no evalúa el comportamiento de contratos personalizados.

Tampoco permite autenticar un contrato, valorar un token o establecer el resultado de una transacción. La atribución a una fuente técnica respalda la explicación de los decimales; no demuestra la seguridad de un activo o una interfaz.

Si necesitas distinguir este asunto del coste de una operación, puedes consultar la guía sobre comisiones de gas e importe enviado en Ethereum. Es una lectura complementaria: aquí la pregunta se limita a cómo expresar unidades de un token.

Lista de comprobación para interpretar una cantidad

  • Identifica el entero original. Anota la cantidad de unidades base que quieres interpretar.
  • Establece los decimales del token. Comprueba si proporciona este metadato y qué valor corresponde al caso concreto.
  • Evita completar datos con suposiciones. No utilices 18 únicamente porque sea el valor predeterminado de OpenZeppelin.
  • Expón la operación. Divide el entero entre 10 ** decimals e identifica el resultado como cantidad mostrada.
  • Revisa la vuelta al entero. Multiplica por la misma escala y comprueba que la conversión exacta produce unidades base enteras.
  • Conserva los límites. Una conversión de presentación no acredita cambios de saldo, resultados de transferencias ni autenticidad.

Si sigue sin conocerse el valor de decimales del token, también queda pendiente su interpretación a escala. En un proceso editorial, esa incertidumbre requiere revisión editorial, registrada como editorial_review; un valor predeterminado genérico no resuelve el dato que falta.

Material educativo elaborado con ayuda de IA. El ejemplo ficticio explica una conversión de unidades y no recomienda realizar transacciones ni firmar solicitudes de una cartera.