Skip to content

Methodology

Metodologia delle criptovalute

BigInt ovunque — ogni Wei fa round-trip esattamente, indipendentemente dalla grandezza.

By Published

Il cluster Cryptoconverte tra tre denominazioni Ethereum — Wei (atomica), Gwei (unità del prezzo del gas) ed ETH (rivolto all’utente). La matematica è banale nel concetto (potenze di dieci) e complicata nell’implementazione (i numeri superano la precisione nativa di JavaScript). Questa pagina spiega le scelte di implementazione.

Le relazioni tra unità

1 ETH = 10⁹ Gwei = 10¹⁸ Wei

L’EVM memorizza tutti i saldi e l’aritmetica in Wei come interi a 256 bit senza segno. ETH e Gwei sono etichette puramente rivolte all’uomo senza rappresentazione on-chain — sono convenzioni di divisione per potenze di dieci per la visualizzazione.

Perché BigInt è obbligatorio

Il tipo Number di JavaScript usa la doppia precisione IEEE 754: ~15-17 cifre decimali significative. Number.MAX_SAFE_INTEGER è 2⁵³ − 1 ≈ 9,007 × 10¹⁵. Un saldo di 9 ETH è approssimativamente 9 × 10¹⁸ Wei— tre ordini di grandezza oltre il limite di precisione.

Concretamente: se memorizzi 1,234567890123456789 ETH in un Number e converti in Wei, le ultime cifre vengono arrotondate. Se accetti quella stringa come input da un wallet e la passi a uno smart contract, il contratto riceve un numero diverso da quello che l’utente pensava di aver inviato.

Le librerie crypto di produzione (ethers.js, viem, web3.js) usano tutte BigInt o un wrapper BigNumber per gli importi in Wei. Il nostro convertitore usa BigInt nativo ovunque. Gli input accettano stringhe decimali; la conversione le analizza attentamente per evitare la coercizione prematura a Number.

Il percorso di parsing delle stringhe decimali

Per un input utente come 1,234 ETH:

  1. Dividi al punto decimale. Parte intera: 1; parte frazionaria: 234.
  2. Imbottisci la parte frazionaria a 18 cifre (la precisione di ETH): 234000000000000000.
  3. Concatena: 1234000000000000000.
  4. Costruisci un BigInt dal risultato.
  5. Per convertire in Gwei, dividi per 10⁹ (la divisione BigInt è una divisione intera — questo è corretto perché Gwei ha 9 cifre decimali in meno rispetto a Wei).

Le conversioni in ETH per la visualizzazione invertono il processo: dividi il BigInt per 10¹⁸ per ottenere la parte intera, modulo 10¹⁸ per la parte frazionaria, formatta come stringa decimale con zeri iniziali dove necessario. Gli zeri finali vengono rimossi per la leggibilità.

Garanzia di round-trip

Qualsiasi conversione attraverso il nostro calcolatore fa round-trip esattamente. Nello specifico:

  • ETH → Wei → ETH preserva tutte le 18 cifre frazionarie.
  • Gwei → Wei → Gwei preserva tutte le 9 cifre frazionarie.
  • Wei → ETH → Wei è esatto perché gli importi Wei sono interi.

Gli input con più precisione di quanto l’unità supporta (es. “1,5 Wei”) vengono troncati, non arrotondati — gli importi sub-Wei non esistono.

Dettagli dell’algoritmo: il percorso BigInt dall’inizio alla fine

Il convertitore è una pipeline di funzioni pure; gli stessi input producono sempre gli stessi output. Pseudocodice per la direzione ETH-to-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);
}

Ogni passaggio usa l’aritmetica BigInt — nessuna coercizione a Number. Il pattern padding-poi-concatenazione evita qualsiasi intermedio in virgola mobile, che è l’unico modo per preservare le 18 cifre decimali frazionarie che ETH consente.

Wei-to-display usa il trucco 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}`;
}

Lo stesso template genera Gwei (dividi per 10⁹) e BTC ↔ satoshi (dividi per 10⁸ — rientra in un Number regolare ma la libreria usa BigInt per coerenza).

Fonti e riferimenti

La gerarchia delle unità Wei / Gwei / ETH è normativa nell’Ethereum Yellow Paper. EIP-1559 ha standardizzato le convenzioni di visualizzazione della tariffa base e della tariffa prioritaria che il nostro calcolatore rispecchia. Il tipo intero a precisione arbitraria di JavaScript è specificato in ECMA-262; il limite di precisione che aggiriamo è da IEEE 754. La precisione a 8 decimali di Bitcoin proviene dal whitepaper originale. Citazioni complete nel blocco Fonti qui sotto.

Presupposti e limitazioni

  • Aritmetica pura, nessuna rete.Il calcolatore non legge mai un RPC di chain o il saldo di un wallet — gli input sono stringhe fornite dall’utente, gli output sono stringhe formattate.
  • Gli importi sub-Wei vengono troncati, non arrotondati. Un input di 0,5 Wei si risolve a 0 Wei. Le unità sub-atomiche non esistono su Ethereum.
  • La formattazione della visualizzazione rimuove gli zeri finali. 1,230000…0 ETH viene visualizzato come 1,23 ETH. Gli smart contract si preoccupano del BigInt, non della stringa di visualizzazione, quindi questo è puramente cosmetico.
  • Nessun prezzo ETH/USD in tempo reale.La conversione fiat usa un servizio di prezzo memorizzato nella cache separato nel cluster valuta — vedi la metodologia valuta per la cadenza di aggiornamento. Il convertitore di unità crypto è privo di prezzi.
  • Solo token nativi delle chain EVM. I token ERC-20 hanno decimali configurabili (USDC ha 6, DAI ha 18); usa il valoredecimals() del contratto token, non il 18 di ETH, per quelli.
  • Nessuna firma, trasmissione o custodia di transazioni. Usa un wallet (Metamask, Rabby) per qualsiasi movimento; il convertitore mostra solo numeri.
  • La formattazione locale BigInt è opt-in. Gli output usano un punto decimale normale; i separatori delle migliaia vengono applicati dal livello UI per ETH ma non per Wei grezzo (un numero a 50 cifre con virgole è più difficile da copiare di uno senza).

Cosa non facciamo

  • Prezzo ETH in tempo reale. In arrivo nella Wave 2 (API CoinGecko + cache ISR).
  • Altre chain. La maggior parte delle chain compatibili con EVM usa la stessa gerarchia Wei/Gwei/token-nativo — sostituisci l’etichetta “ETH” con MATIC, BNB, ARB, ecc., e la matematica è identica.
  • Denominazioni Bitcoin. 1 BTC = 100.000.000 satoshi rientra comodamente in un intero a 64 bit; BigInt non è necessario. La nostra libreria sottostante supporta la conversione BTC ↔ satoshi; lo strumento UI arriva in un lotto successivo.
  • Transazioni. Non inviamo nulla a nessuna rete.

Frequently asked questions

Come converte Convertitive tra Wei, Gwei ed ETH?
Le relazioni sono esatte per definizione nell'Ethereum Yellow Paper: 1 ETH = 10⁹ Gwei = 10¹⁸ Wei. Tutta l'aritmetica usa JavaScript BigInt per evitare la perdita di precisione in virgola mobile IEEE 754. La conversione è: Wei = ETH × 10¹⁸ (moltiplicazione BigInt, senza perdite). Nessun arrotondamento, nessuna approssimazione — ogni Wei fa round-trip esattamente.
Perché BigInt è obbligatorio per la conversione delle unità Ethereum?
Il tipo Number di JavaScript è un double IEEE 754 (virgola mobile a 64 bit) con una mantissa a 53 bit, che dà una rappresentazione intera esatta solo fino a 2⁵³ = 9.007.199.254.740.992 (circa 9 × 10¹⁵). Un solo ETH = 10¹⁸ Wei supera già questo di 100×. Senza BigInt, anche piccoli valori ETH perdono la precisione a livello di Wei. Per esempio, 1,5 ETH = 1.500.000.000.000.000.000 Wei — un intero a 19 cifre che Number arrotonda silenziosamente.
Cosa memorizza effettivamente la EVM (Ethereum Virtual Machine) per i saldi?
L'EVM (Ethereum Yellow Paper, §4.1) memorizza i saldi dei conti come interi a 256 bit senza segno in unità di Wei. Non esiste rappresentazione in virgola mobile o decimale a livello di protocollo. Gwei è una denominazione leggibile dall'uomo usata per i prezzi del gas (la tariffa base EIP-1559 è denominata in Gwei); ETH è la denominazione di visualizzazione. Solo Wei esiste a livello EVM.
Come funziona il percorso di parsing delle stringhe decimali per input ETH frazionari?
L'ETH frazionario come '0.001' viene analizzato come stringa decimale, diviso al punto decimale, e la parte frazionaria viene imbottita a esattamente 18 cifre decimali prima di essere analizzata come BigInt. Per esempio, '0.001' → parte intera '0', frazionaria '001' + 15 zeri di padding = '001000000000000000' → 1.000.000.000.000.000 Wei. Questo evita qualsiasi rappresentazione intermedia in virgola mobile.
Quali sono le limitazioni del convertitore Wei / Gwei / ETH?
Tre limitazioni: (1) il convertitore non conosce il prezzo attuale ETH/USD — converte unità, non valore; (2) la stima del gas (tariffa totale = unità_gas × (tariffa_base + tariffa_priorità) in Gwei) non viene eseguita; (3) i decimali dei token ERC-20 non sono supportati — molti token usano 6 o 8 cifre decimali piuttosto che 18, e trattarli come ETH darebbe risultati sbagliati.

Related

Published May 14, 2026