Skip to content

Methodology

Metodología de cripto

BigInt en todo momento: cada Wei hace la ida y vuelta exactamente, independientemente de la magnitud.

By Published

El clúster de Cripto convierte entre tres denominaciones de Ethereum: Wei (atómica), Gwei (unidad de precio del gas) y ETH (cara al usuario). Las matemáticas son triviales en concepto (potencias de diez) y complicadas en la implementación (los números superan la precisión nativa de JavaScript). Esta página explica las decisiones de implementación.

Las relaciones entre unidades

1 ETH = 10⁹ Gwei = 10¹⁸ Wei

La EVM almacena todos los saldos y la aritmética en Wei como enteros sin signo de 256 bits. ETH y Gwei son puramente etiquetas orientadas a los humanos sin representación en cadena: son convenciones de división por potencia de diez para su visualización.

Por qué BigInt es obligatorio

El tipo Number de JavaScript usa precisión doble IEEE 754: ~15-17 dígitos decimales significativos. Number.MAX_SAFE_INTEGER es 2⁵³ − 1 ≈ 9.007 × 10¹⁵. Un saldo de 9 ETH es aproximadamente 9 × 10¹⁸ Wei: tres órdenes de magnitud más allá del límite de precisión.

Concretamente: si almacena 1.234567890123456789 ETH en un Number y convierte a Wei, los últimos dígitos se redondean. Si acepta esa cadena como entrada de una billetera y la pasa a un contrato inteligente, el contrato recibe un número diferente al que el usuario creyó haber enviado.

Las bibliotecas de cripto de producción (ethers.js, viem, web3.js) usan BigInt o un wrapper de BigNumber para cantidades en Wei. Nuestro conversor usa BigInt nativo en todo momento. Las entradas aceptan cadenas decimales; la conversión las analiza cuidadosamente para evitar la coerción prematura a Number.

La ruta de análisis de cadenas decimales

Para una entrada de usuario como 1.234 ETH:

  1. Dividir en el punto decimal. Parte entera: 1; parte fraccionaria: 234.
  2. Rellenar la parte fraccionaria hasta 18 dígitos (la precisión de ETH): 234000000000000000.
  3. Concatenar: 1234000000000000000.
  4. Construir un BigInt a partir del resultado.
  5. Para convertir a Gwei, dividir por 10⁹ (la división BigInt es división entera: esto es correcto porque Gwei tiene 9 decimales menos que Wei).

Las conversiones a ETH para visualización invierten el proceso: dividir el BigInt por 10¹⁸ para obtener la parte entera, módulo 10¹⁸ para la parte fraccionaria, formatear como cadena decimal con ceros a la izquierda cuando sea necesario. Los ceros finales se eliminan para mayor legibilidad.

Garantía de ida y vuelta

Cualquier conversión a través de nuestra calculadora hace la ida y vuelta exactamente. Específicamente:

  • ETH → Wei → ETH preserva los 18 dígitos fraccionarios.
  • Gwei → Wei → Gwei preserva los 9 dígitos fraccionarios.
  • Wei → ETH → Wei es exacto porque las cantidades en Wei son enteros.

Las entradas con más precisión de la que admite la unidad (p. ej., «1.5 Wei») se truncan, no se redondean: las fracciones de Wei no existen.

Detalles del algoritmo: la ruta BigInt de extremo a extremo

El conversor es un pipeline de funciones puras; las mismas entradas siempre producen las mismas salidas. Pseudocódigo para la dirección ETH a Wei:

function ethToWei(input: string): bigint {
  const [intPart, fracPartRaw = ""] = input.split(".");
  if (fracPartRaw.length > 18) throw new Error("over-precise");
  const fracPart = fracPartRaw.padEnd(18, "0");
  return BigInt(intPart) * 10n ** 18n + BigInt(fracPart);
}

Cada paso usa aritmética BigInt: sin coerción a Number. El patrón de relleno y concatenación evita cualquier intermedio de punto flotante, que es la única manera de preservar los 18 dígitos decimales fraccionarios completos que permite ETH.

Wei a visualización usa el truco inverso:

function weiToEth(wei: bigint): string {
  const intPart = wei / 10n ** 18n;
  const fracPart = wei % 10n ** 18n;
  const fracStr = fracPart.toString().padStart(18, "0").replace(/0+$/, "");
  return fracStr.length === 0 ? intPart.toString() : `${intPart}.${fracStr}`;
}

La misma plantilla genera Gwei (dividir por 10⁹) y BTC ↔ satoshi (dividir por 10⁸: cabe en un Number normal pero la biblioteca usa BigInt por consistencia).

Fuentes y referencias

La jerarquía de unidades Wei / Gwei / ETH es normativa en el Libro Amarillo de Ethereum. EIP-1559 estandarizó las convenciones de visualización de tarifa base y tarifa de prioridad que refleja nuestra calculadora. El tipo entero de precisión arbitraria de JavaScript está especificado en ECMA-262; el límite de precisión que sorteamos proviene de IEEE 754. La precisión decimal de Bitcoin en 8 cifras proviene del whitepaper original.

Supuestos y limitaciones

  • Aritmética pura, sin red. La calculadora nunca lee un RPC de cadena ni un saldo de billetera: las entradas son cadenas proporcionadas por el usuario, las salidas son cadenas formateadas.
  • Las cantidades sub-Wei se truncan, no se redondean. Una entrada de 0.5 Wei se resuelve como 0 Wei. Las unidades sub-atómicas no existen en Ethereum.
  • El formato de visualización elimina los ceros finales. 1.230000…0 ETH se muestra como 1.23 ETH. Los contratos inteligentes se preocupan por el BigInt, no por la cadena de visualización, por lo que es puramente cosmético.
  • Sin precio ETH/USD en tiempo real. La conversión de moneda fiduciaria usa un servicio de precio en caché separado en el clúster de divisas: consulte la metodología de divisas para la cadencia de actualización. El conversor de unidades cripto está libre de precios.
  • Solo tokens nativos de cadenas EVM. Los tokens ERC-20 tienen decimales configurables (USDC tiene 6, DAI tiene 18); use el valor decimals() del contrato del token, no el 18 de ETH, para esos.
  • Sin firma de transacciones, difusión ni custodia. Use una billetera (Metamask, Rabby) para cualquier movimiento; el conversor solo muestra números.
  • El formato local de BigInt es opcional. Las salidas usan un punto decimal simple; los separadores de miles los aplica la capa de interfaz de usuario para ETH pero no para Wei sin procesar (un número de 50 dígitos con comas es más difícil de copiar que uno sin ellas).

Lo que no hacemos

  • Precio de ETH en tiempo real. Próximamente en la ola 2 (API de CoinGecko + caché ISR).
  • Otras cadenas. La mayoría de las cadenas compatibles con EVM usan la misma jerarquía Wei/Gwei/token nativo: reemplace la etiqueta “ETH” con MATIC, BNB, ARB, etc., y las matemáticas son idénticas.
  • Denominaciones de Bitcoin. 1 BTC = 100 000 000 satoshi cabe cómodamente en un entero de 64 bits; BigInt no es necesario. Nuestra biblioteca subyacente admite la conversión BTC ↔ satoshi; la herramienta de interfaz de usuario se publica en un lote posterior.
  • Transacciones. No enviamos nada a ninguna red.

Frequently asked questions

¿Cómo convierte Convertitive entre Wei, Gwei y ETH?
Las relaciones son exactas por definición en el Libro Amarillo de Ethereum: 1 ETH = 10⁹ Gwei = 10¹⁸ Wei. Toda la aritmética usa JavaScript BigInt para evitar la pérdida de precisión de punto flotante IEEE 754. La conversión es: Wei = ETH × 10¹⁸ (multiplicación BigInt, sin pérdidas). Sin redondeo, sin aproximación: cada Wei hace la ida y vuelta exactamente.
¿Por qué es obligatorio BigInt para la conversión de unidades de Ethereum?
El tipo Number de JavaScript es un doble IEEE 754 (punto flotante de 64 bits) con una mantisa de 53 bits, lo que da representación de enteros exacta solo hasta 2⁵³ = 9 007 199 254 740 992 (aproximadamente 9 × 10¹⁵). Un solo ETH = 10¹⁸ Wei ya supera esto en 100×. Sin BigInt, incluso los valores pequeños de ETH pierden precisión al nivel de Wei. Por ejemplo, 1.5 ETH = 1 500 000 000 000 000 000 Wei: un entero de 19 dígitos que Number redondea silenciosamente.
¿Qué almacena realmente la Máquina Virtual Ethereum para los saldos?
La EVM (Libro Amarillo de Ethereum, §4.1) almacena los saldos de cuenta como enteros sin signo de 256 bits en unidades de Wei. No hay representación de punto flotante ni decimal en la capa del protocolo. Gwei es una denominación legible por humanos de conveniencia usada para los precios del gas (la tarifa base de EIP-1559 está denominada en Gwei); ETH es la denominación de visualización. Solo Wei existe a nivel de la EVM.
¿Cómo funciona la ruta de análisis de cadenas decimales para entradas fraccionarias de ETH?
Un ETH fraccionario como '0.001' se analiza como cadena decimal, se divide en el punto decimal y la parte fraccionaria se rellena hasta exactamente 18 decimales antes de analizarse como BigInt. Por ejemplo, '0.001' → parte entera '0', fracción '001' + 15 ceros de relleno = '001000000000000000' → 1 000 000 000 000 000 Wei. Esto evita cualquier representación intermedia en punto flotante.
¿Cuáles son las limitaciones del conversor Wei / Gwei / ETH?
Tres limitaciones: (1) el conversor no conoce el precio actual ETH/USD: convierte unidades, no valores; (2) la estimación de gas (tarifa total = unidades_gas × (tarifa_base + tarifa_prioridad) en Gwei) no se realiza; (3) los decimales de tokens ERC-20 no están soportados: muchos tokens usan 6 u 8 decimales en lugar de 18, y tratarlos como ETH daría resultados incorrectos.

Related

Published May 14, 2026