ETH ↔ Wei ↔ Gwei Converter
Convert between Ethereum units (wei, gwei, ether, etc.). BigInt math, no precision loss.
ETH ↔ Wei ↔ Gwei Converter
1.01000.01000000.01000000000.01000000000000.01000000000000000.01000000000000000000Uses ethers.parseUnits / formatUnits (BigInt math — no floating-point loss).
Runs entirely in your browser. Your input never leaves your device.
What next?
How it works
Hierarquia de unidades
Ethereum (e EVM chains compatíveis) usa três unidades principais:
| Unidade | Valor em wei | Quando usar | |---------|--------------------------------------------|----------------------------| | wei | 1 | Unidade atômica, todos os cálculos internos do EVM | | gwei | 1,000,000,000 (10^9) | Gas price | | ether | 1,000,000,000,000,000,000 (10^18) | Display para humanos |
Outras unidades: szabo (10^12 wei), finney (10^15 wei), Kwei/Mwei (10^3, 10^6). Raramente usadas hoje — gwei e ether dominam.
Por que tantos zeros
Ether é a denominação humana — 0.001 ETH é uma quantia pequena de café (~$3). Mas o EVM trabalha em wei para evitar floats: 0.001 ETH = 1_000_000_000_000_000 wei (1 quadrilhão). Inteiros não têm imprecisão de ponto flutuante.
Gas price está em gwei porque essa é a escala natural — 1 gwei ≈ $0.0000037 (com ETH a $3700). Um swap simples custa ~150,000 gas units * 30 gwei = 0.0045 ETH = ~$17.
A armadilha do JavaScript
Number em JS é IEEE 754 double — 53 bits de precisão inteira. Acima de 2^53 = 9_007_199_254_740_992 você perde precisão:
1e18 + 1 === 1e18 // true em JS — perdeu o "+1"
Wei valores acima de ~9 ETH já entram nessa zona. Sempre use BigInt para wei:
const wei = BigInt('1000000000000000000') // 1 ETH em wei
ethers.parseUnits e ethers.formatUnits retornam BigInt e tratam string ↔ BigInt corretamente.
EIP-1559: base fee + priority fee
Desde a London hardfork (2021), gas tem duas componentes:
- base fee (gwei): definido pelo protocolo conforme demanda. Burned.
- priority fee (gwei): tip ao validator. Você escolhe.
maxFeePerGas = base fee + priority fee + buffer. Se você setar maxPriorityFeePerGas = 2 gwei e base fee = 30 gwei, paga ~32 gwei por unit.
Casos de uso
- Debugar tx receipt: receipt vem em wei; converte para ETH legível
- Calcular custo de gas:
gas_used * effective_gas_priceem wei → ETH → USD - Validar input do usuário: form pede ETH, você precisa em wei para a tx
- Exibir saldos com precisão completa (sem truncar) ou com precisão fixa (2 decimais)
Edge cases
- Notação científica: input
1e18é aceito mas pode confundir com perda de precisão. Prefira1000000000000000000ou useparseUnits('1', 'ether'). - Decimais em wei: wei é inteiro.
0.5 weinão existe. - Negativos: wei não pode ser negativo. Negativos costumam indicar erro lógico.
Bibliotecas
ethers.js (parseUnits, formatUnits). BigInt nativo do JS. Tudo client-side.
FAQ
Por que não posso usar Number para wei?
JavaScript Number perde precisão acima de 2^53 (~9 quadrilhões). 1 ETH = 10^18 wei, então qualquer wei acima de ~9 ETH já entra nessa zona. Sempre use BigInt ou strings.
Qual a diferença entre parseUnits e parseEther?
parseEther("1") = parseUnits("1", "ether") = parseUnits("1", 18) = BigInt("1000000000000000000"). Tudo equivalente. parseUnits é mais geral (suporta qualquer denominação de token, ex: USDC com 6 decimais).
Por que gas em gwei e não em ETH?
Escala natural. 30 gwei é um número humano (~$0.00011 a $3700/ETH). Em ETH seria 0.00000003 ETH — difícil de comparar visualmente. EIP-1559 ferramentas e wallets exibem em gwei por convenção.
Como converter entre tokens com decimais diferentes?
USDC = 6 decimais, ETH = 18. Para 100 USDC em "raw" units: parseUnits("100", 6) = 100_000_000n. Sempre cheque decimals() do contrato ERC20 antes de fazer cálculo.
Posso usar notação científica?
A ferramenta aceita 1e18, mas pode causar perda de precisão. Prefira strings decimais: "1000000000000000000" ou use parseEther("1").
Tudo client-side?
Sim. ethers.js no browser. Zero servidor. Funciona offline.