Conversor ETH ↔ Wei ↔ Gwei

Converte entre unidades do Ethereum (wei, gwei, ether etc.). Cálculo com BigInt, sem perda de precisão.

web3

Conversor ETH ↔ Wei ↔ Gwei

ETH (ether)1.0
finney (10⁻³)1000.0
szabo (10⁻⁶)1000000.0
gwei (10⁻⁹)1000000000.0
mwei (10⁻¹²)1000000000000.0
kwei (10⁻¹⁵)1000000000000000.0
wei (a menor)1000000000000000000

Usa ethers.parseUnits / formatUnits (aritmética BigInt — sem perda de ponto flutuante).

Roda totalmente no seu navegador. Seus dados nunca saem do seu dispositivo.

What next?

How it works

Hierarquia de unidades

Ethereum (e EVM chains compatíveis) usa três unidades principais:

UnidadeValor em weiQuando usar
wei1Unidade atômica, todos os cálculos internos do EVM
gwei1,000,000,000 (10^9)Gas price
ether1,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_price em 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. Prefira 1000000000000000000 ou use parseUnits('1', 'ether').
  • Decimais em wei: wei é inteiro. 0.5 wei nã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.

More web3 tools